2009-07-09 5 views
2

これはanother Delphi-version questionに関連していますが、依然として異なります。特定のDelphiビルドを検出するにはどうすればよいですか?

私のコードをコンパイルしているDelphiコンパイラのサービスパック(またはビルド番号)を検出する方法を探しています。 jedi.incはいいですが、正確なバージョンはわかりません。 (私はSUPPORTS_ *の定義をバージョン関連にも使用できません)

固定されている古いバージョン(この場合は_ValLong bug in Delphi 2009)にいくつかのバグが存在するので、これが必要ですそれ以降のサービスパック(この場合はDelphi 2009 Service Pack 3)。

現在、私はこのように、私のコードでチェックのすべての種類を持っている:

{$ IFDEF BUG_QC_68123}

しかし、私はちょうど私のメインでこれを言うことができないファイルを含める:

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

...これは、D2009SP3以降ではこのバグはもうなくなります。

アイデア?

PS:これはおそらくDelphiの古いバージョン(またはそれより新しいバージョン)にも当てはまりますので、ライブラリやコンポーネントベンダーも関心があります。

答えて

1

ソフトウェアにコンパイラファイルのバージョンを含めることができます。たとえば、DCC32.exeには、プログラム上で取得してconstとしてユニットに書き込むことができるファイルバージョンがあります。これは、ビルドプロセスの一環として行うことができますので、アプリケーションをビルドする前にバージョン情報を取得します(FinalBuilderのようなものでは非常に簡単です)。

私はAboutスクリーンで有用な情報のさまざまなビットを得ることができるように他のもののためにこれをしました。また、アプリケーションにエラーが発生した場合、この情報をEurekaLogバグレポートにバンドルすることができます。

ただし、DCC32.exeのファイルバージョンがすべてのDelphiアップデートで更新されるかどうかはわかりません。

3

残念ながら、System.pasのRTLVersionのような定数はアップデートでは更新されませんが、誰かがQCエントリを作成したい場合は、それが良い提案になると思います。

テストしているバグがコードで再現するのが現実的であれば、起動時にテストし、独自のグローバルフラグを設定することができます。

私は常に最新のアップデートを適用することによって、これらの違いを回避します。私は、更新が不安定で、それを元に戻すことを余儀なくされた場合には、まだ動いていない。少なくともデルファイではありません。

5

バージョンごとに定義されたシンボルがあります。

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 あなたは別のビルド番号を確認することができません。

そして好奇心を込めて、ターボパスカルバージョンのVER10-VER70、そしてVER110はC++ビルダーバージョンでした。

+0

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

1

コンパイラはその情報を公開しません。メジャーバージョンのみが表示され、更新が適用されても変更されません。

あなたができることは、常に最新のアップデート用のコードを書くことです。あなたのコードの消費者にも最新の更新があると仮定してください。彼らはしない場合、それは自分のせいで、問題ではないあなたはが心配する必要があります。システム要件に言及してください。確かに、あなたのコードはそれらのためにはうまくいかないでしょう。しかし、彼らはまだ知られている悪いコードを使用しているので、他の人は誰もしません。

次善策は、には更新が適用されていると仮定して書いています。つまり、すべての既知のバグが存在しているかのようにコードを記述します。欠点は、あなたのコードがおそらく実行されず、そうでなければ実行できないことです。アップグレードによって正しかったことを行った人はすべて、あなたの次善のコードを続けて処罰されます。

関連する問題