Как определить конкретные сборки Delphi? - PullRequest
2 голосов
/ 09 июля 2009

Это относится к другому вопросу Delphi-версии , но все же отличается;

Я ищу способ определить пакет обновления (или номер сборки) компилятора Delphi, который компилирует мой код. jedi.inc хорош, но он не говорит мне точную версию. (Я также не могу использовать определения SUPPORTS_ * там, поскольку они также связаны с версией)

Мне это нужно, потому что некоторые ошибки присутствуют в более старых версиях (в данном случае это ошибка _ValLong в Delphi 2009 ), которая исправлена ​​в более позднем пакете обновления (Delphi 2009 с пакетом обновления 3 в этом случай).

В настоящее время в моем коде есть все виды проверок, например:

{$ IFDEF BUG_QC_68123}

Но я не могу просто сказать это в своем главном включаемом файле:

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

... Поскольку это упустит тот факт, что D2009SP3 и более поздние версии больше не имеют этой ошибки.

Есть идеи?

PS: Это, вероятно, также будет применяться к более старым (и более новым) версиям Delphi, поэтому я полагаю, что любой поставщик библиотек и / или компонентов также будет заинтересован в этом.

Ответы [ 4 ]

5 голосов
/ 09 июля 2009

Для каждой версии определены символы:

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

Источник Другой источник Вы не можете проверить разные номера сборки.

И для любопытных, VER10-VER70, где версии с турбо-паскалем, и VER110 были версией для C ++.

3 голосов
/ 09 июля 2009

К сожалению, такие константы, как RTLVersion в System.pas, не обновляются в обновлениях, но я думаю, что было бы неплохо, если бы кто-то захотел сделать для этого запись QC.

Если ошибки, которые вы тестируете, практически невозможно воспроизвести в коде, вы всегда можете проверить их при запуске и установить свои собственные глобальные флаги.

Я преодолеваю эти различия, следя за тем, чтобы мы всегда применяли последние обновления. Я еще не столкнулся с делом, когда обновление было нестабильным и заставило меня откатить его. По крайней мере, не с Delphi.

1 голос
/ 09 июля 2009

Вы можете попробовать включить версию файла компилятора в свое программное обеспечение. Например, DCC32.exe имеет версию файла, к которой вы можете программно получить доступ, а затем записать в устройство как const. Это можно сделать как часть процесса сборки, чтобы получить информацию о версии перед сборкой приложения (это было бы очень легко сделать с чем-то вроде FinalBuilder ).

Я сделал это для других целей, чтобы на нашем экране «О программе» мы могли получать различную информацию. Также, когда у нас есть ошибка в одном из наших приложений, мы можем включить эту информацию в наши отчеты об ошибках EurekaLog.

Однако я не знаю, обновляется ли версия файла на DCC32.exe при каждом обновлении Delphi.

1 голос
/ 09 июля 2009

Компилятор не раскрывает эту информацию. Он сообщает только основную версию, которая не изменяется при применении обновлений.

Я думаю, что лучшее, что вы можете сделать, это всегда писать код для последнего обновления. Предположим, что пользователи вашего кода также получат последнее обновление. Если они этого не делают, то это их собственная вина, и не проблема , о которой вам нужно беспокоиться. Упомяните это в ваших системных требованиях. Конечно, ваш код не будет работать для них, но никто другой не будет работать, потому что они все еще используют заведомо плохой код.

Следующая лучшая альтернатива - написать, предполагая, что нет обновлений. То есть, напишите свой код, как будто все известные ошибки все еще присутствуют. Недостатком является то, что ваш код, вероятно, не будет работать так, как он мог бы, поэтому каждый, кто правильно сделал обновление, наказывается тем, что у него остается неоптимальный код.

...