Как определить конкретные сборки Delphi?

Это связано с другим вопросом о 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 ответа

Решение

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

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

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

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

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, где версии Turbo Pascal, и VER110 был версией C++ Builder.

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

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

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

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

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

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

Другие вопросы по тегам