Question

Ceci est lié à une autre question Delphi version mais toujours différents;

Je cherche un moyen de détecter le service pack (ou le numéro de build) du compilateur Delphi qui est la compilation de mon code. jedi.inc est agréable , mais il ne me dit pas la version exacte. (Je ne peux pas utiliser le SUPPORTS_ * définit là non plus, car ceux-ci sont trop liés version)

J'ai besoin, parce que certains bugs sont présents dans les anciennes versions (dans ce cas, il est un _ bug ValLong dans Delphi 2009 ) qui est fixé dans un après-pack de service (service pack 3 Delphi 2009 dans ce cas).

Actuellement, j'ai toutes sortes de contrôles dans mon code, comme ceci:

  

{$ IFDEF BUG_QC_68123}

Mais je ne peux pas dire que dans mon principal fichier include:

{$IFDEF DELPHI2009_UP}
  {$DEFINE BUG_QC_68123}
{$ENDIF}

... Comme il manquerait le fait que D2009SP3 et plus tard ne pas avoir ce bug plus.

Toutes les idées?

PS:. Ce sera probablement également applicable aux plus âgés (et plus récents) versions de Delphi, de sorte que toute Library- et / ou composant fournisseur aura un intérêt pour cela aussi, je suppose que

Était-ce utile?

La solution

Vous pouvez essayer, y compris la version du fichier du compilateur dans votre logiciel. Par exemple, DCC32.EXE dispose d'une version de fichier sur ce que vous pouvez obtenir à programme puis écrire à une unité en tant que const. Cela pourrait se faire dans le cadre de votre processus de construction il obtient l'information de version avant de construire votre application (il serait très facile à faire avec quelque chose comme FinalBuilder ).

Je l'ai fait pour d'autres choses, afin que sur notre écran A propos de nous pouvons obtenir différents bits d'informations utiles. De même, lorsque nous avons une erreur dans l'une de nos applications, nous pouvons regrouper cette information dans nos rapports de bugs EurekaLog.

Cependant, je ne sais pas si la version du fichier sur DCC32.EXE est mis à jour avec chaque mise à jour Delphi.

Autres conseils

Il y a des symboles définis pour chaque version:

VER80 - Delphi 1
VER90 - Delphi 2
VER100 - Delphi 3
VER120 - Delphi 4
VER130 - Delphi 5
VER140 - Delphi 6
VER150 - Delphi 7
VER160 - Delphi 8
VER170 - Delphi 2005
VER180 - Delphi 2006
VER180 - Delphi 2007
VER185 - Delphi 2007 (Note: symbol VER185, for example, is used to indicate Delphi 2007 compiler or an earlier version.)
VER190 - Delphi 2007 for .NET
VER200 - C++ Builder 2009
VER210 - Delphi 2010
VER220 - Delphi XE
VER230 - Delphi XE2
VER240 - Delphi XE3
VER250 - Delphi XE4
VER260 - Delphi XE5
VER270 - Delphi XE6
VER280 - Delphi XE7
WIN32 - Indicates that the operating environment is the Win32 API.
LINUX - Indicates that the operating environment is Linux
MSWINDOWS - Indicates that the operating environment is the MS Windows/li] 
CONSOLE - Indicates that an application is being compiled as a console application

Source Une autre source Vous ne pouvez pas vérifier les différents numéros de build.

Et pour les curieux, VER10-VER70 où les versions turbo pascals et VER110 était un C ++ Builder version.

Malheureusement, les constantes comme RTLVersion dans System.pas ne sont pas mis à jour dans les mises à jour, mais je pense que ce serait une bonne idée si quelqu'un veut faire pour une entrée QC.

Si les bugs que vous testez sont pratiques à reproduire dans le code, vous pouvez toujours tester pour eux au démarrage et de définir vos propres indicateurs globaux.

Je reçois autour de ces différences en faisant en sorte que nous appliquons toujours les dernières mises à jour. Je n'ai pas couru dans un cas encore où une mise à jour était instable et m'a forcé à rouler en arrière. Au moins pas avec Delphi.

Le compilateur ne pas exposer cette information. Il ne vous indique la version majeure, qui ne change pas lorsque les mises à jour sont appliquées.

Je pense que le mieux que vous pouvez faire est d'écrire toujours le code de la dernière mise à jour. Supposons que les consommateurs de votre code auront également la dernière mise à jour. Si elles ne le font pas, alors il est leur propre faute, et non un problème à se soucier. Mentionner dans la configuration système requise. Bien sûr, votre code ne fonctionnera pas pour eux, mais ni quelqu'un d'autre volonté parce qu'ils utilisent encore le code connu-mauvais.

La meilleure solution de rechange consiste à écrire en supposant que pas mises à jour ont été appliquées. Autrement dit, écrivez votre code comme si tous les bugs connus sont toujours présents. L'inconvénient est que votre code ne fonctionnera probablement pas aussi bien qu'il le pourrait autrement, que tout le monde qui a fait la bonne chose en amélioration est puni en continuant d'avoir votre code suboptimale.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top