2009-07-09 11 views
2

Ceci est lié à another Delphi-version question mais toujours différent;Comment détecter des builds Delphi spécifiques?

Je suis à la recherche d'un moyen de détecter le service-pack (ou le numéro de build) du compilateur Delphi qui compile mon code. Le jedi.inc est sympa, mais il ne me dit pas la version exacte. (Je ne peux pas utiliser les définitions SUPPORTS_ * là aussi, car elles sont aussi liées à la version)

J'ai besoin de cela, car certains bogues sont présents dans les anciennes versions (dans ce cas, c'est un _ValLong bug in Delphi 2009) qui est corrigé dans un service pack ultérieur (Delphi 2009 Service Pack 3 dans ce cas).

J'ai actuellement toutes sortes de contrôles dans mon code, comme ceci:

{$ IFDEF BUG_QC_68123}

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

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

... Comme cela manquerait le fait que D2009SP3 et plus tard n'ont plus ce bug.

Des idées? PS: Cela s'appliquera probablement aussi aux versions plus anciennes (et plus récentes) de Delphi, donc tout fournisseur de bibliothèques et/ou de composants aura un intérêt pour cela aussi, je présume.

Répondre

1

Vous pouvez essayer d'inclure la version du fichier du compilateur dans votre logiciel. Par exemple, DCC32.exe contient une version de fichier que vous pouvez utiliser par programmation, puis écrire dans une unité en tant que const. Cela pourrait être fait dans le cadre de votre processus de construction afin qu'il reçoive les informations de version avant de construire votre application (ce serait très facile à faire avec quelque chose comme FinalBuilder).

Je l'ai fait pour d'autres choses de sorte que sur notre écran À propos de nous pouvons obtenir divers bits d'informations utiles. Aussi, lorsque nous avons une erreur dans l'une de nos applications, nous pouvons regrouper cette information dans nos rapports de bug EurekaLog.

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

3

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

Si les bogues que vous testez sont pratiques à reproduire dans le code, vous pouvez toujours les tester au démarrage et définir vos propres indicateurs globaux. Je contourne ces différences en veillant à toujours appliquer les dernières mises à jour. Je n'ai pas encore couru dans une affaire où une mise à jour était instable et m'a forcé à la renvoyer. Au moins pas avec Delphi.

5

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 Another source Vous ne pouvez pas vérifier les différents numéros de build.

Et pour les curieux, VER10-VER70 où les versions turbo pascal, et VER110 était une version constructeur C++.

+0

VER190 = Delphi.NET 2007. VER200 = Delphi 2009. CIL = Delphi.NET –

1

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

Je pense que le mieux que vous pouvez faire est de toujours écrire du code pour 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 c'est leur propre faute, et pas un problème vous besoin de s'inquiéter. Mentionnez-le dans vos exigences système. Bien sûr, votre code ne fonctionnera pas pour eux, mais personne d'autre ne le fera parce qu'ils utilisent toujours du code connu.

La meilleure solution consiste à écrire en supposant que aucune mise à jour ont été appliquées.C'est-à-dire, écrivez votre code comme si tous les bogues connus sont toujours présents. L'inconvénient est que votre code ne fonctionnera probablement pas aussi bien qu'il le ferait autrement, donc tout le monde qui a fait la bonne chose en mettant à jour est puni en continuant à avoir votre code sous-optimal.