8

カスタム コンポーネントを含むプロジェクトに取り組んでいる Delphi 2007 では、フル ビルドを実行するとメッセージの最初の 4 つの警告として次のような警告が表示されます (ただし、ストレート コンパイルを実行すると表示されません)。

[DCC Warning] Dialogs.pas(1426): W1002 Symbol 'TFileOpenDialog' is specific to a platform
[DCC Warning] Dialogs.pas(1446): W1002 Symbol 'TFileSaveDialog' is specific to a platform
[DCC Warning] ComCtrls.pas(6757): W1036 Variable 'Section' might not have been initialized
[DCC Warning] ComCtrls.pas(19268): W1023 Comparing signed and unsigned types - widened both operands

私は通常、できる限りコンパイラの警告を排除しようとしますが、これらは「ストック」Delphi ユニットです。これらの警告は、コード内の何かの間接的な結果ですか? もしそうなら、どのように私は何を/どこで見つけますか? そうでない場合、それらについてどうすればよいですか?

4

8 に答える 8

12

ビルド パスに在庫の Delphi ソースがあるためだと思います。Delphi ソース ディレクトリを削除すると、これらの警告なしでビルドされるはずです。

于 2009-05-15T21:08:07.470 に答える
6

ビルドを実行するときにのみ表示される理由は、コンパイル コマンドが前回のコンパイル以降に変更されたソースのみをコンパイルするためです。Build コマンドは、変更に関係なく、プロジェクト内のすべてを再コンパイルします。

この警告は、Delphi ソース フォルダがプロジェクトの検索パスに含まれていることが原因である可能性が最も高いです。それを削除し、プロジェクトのフォルダー内の dcus を削除すると、再コンパイル時にプロジェクト内に Delphi ソースが必要かどうかがわかります。私の経験では、Delphi の実装でバグを発見し、そのバグを修正するために Delphi クラスのカスタム コピーを作成した場合は、Delphi ソースが必要になるはずです。この場合、Delphi ソースなしでビルドしようとすると、通常は次のようになります。

ユニット '%s' は '%s' のユニット '%s' でコンパイルされていますが、異なるバージョン '%s' が見つかりました (F2446)

%s は、低レベルの Delphi クラスになります。

エラーが発生しない場合は、Delphi ソースは本当に必要ありませんでした。

これは、Delphi ソースが環境検索パスにある場合にも発生する可能性があります。

于 2009-05-16T02:25:37.347 に答える
3

あなたが言及した最初の 2 つの警告は (他のいくつかの警告とともに)、現在使用しているコードは、Delphi がサポートする異なるプラットフォーム間ではコンパイルできないことを認識させるためのものです。Delphi 2007 の場合はそれほど多くはありませんが、Kylix (廃止された Linux バージョン) と Delphi for .NET (これも廃止されました) の名残が含まれています。

Delphi の最近のバージョンでは、クロスプラットフォーム(Win32/Win64、OS X、iOS、および Android)がサポートされており、Firemonkey アプリケーション(Win32 と Win64 に違いがある場合は VCL アプリ)を開発するときに、これらのメッセージが再び関連します。これらは、さまざまなオペレーティング システム用にコードを調整する必要があるコード内のポイントを示しています。(たとえば、引用した2つはWindows固有のダイアログ用です。ターゲットプラットフォームに基づいて別のダイアログを使用し、{$IFDEF}プラットフォーム固有の領域の周りにステートメントを使用して、それらが他のためにコンパイルされないようにする必要がありますプラットフォーム。

VCL ベースであるため、現在のコードを (最新の Delphi バージョンであっても) Windows 以外に直接移植することはできないため、これらの警告を安全にオフにすることができます。を使用Project->Options->Compiler Messagesし、次のメッセージのチェックを外します (または、コードに含めたコンパイラ定義を使用します)。

Library Symbol                       {$WARN SYMBOL_LIBRARY OFF}
Platform Symbol                      {$WARN SYMBOL_PLATFORM OFF}
Library Unit                         {$WARN UNIT_LIBRARY OFF}
Platform Unit                        {$WARN UNIT_PLATFORM OFF}
Unsafe type  (.NET remnant)          {$WARN UNSAFETYPE OFF}
Unsafe code  (.NET remnant)          {$WARN UNSAFECODE OFF}
Unsafe typecast (.NET remnant)       {$WARN UNSAFECAST OFF}

あなたが言及した最後の 2 つは、D2007 (IDE バージョン 11.0.2804.9245) では再現できないため、skamradt の回答が正しいと思われます。検索パスに VCL ソース ディレクトリが含まれているためです。 t。に設定する必要があります$(BDS)\Lib。ソースをステップスルーできるようにする必要がある場合は、ページを使用し、代わりに下のオプションProject->Options->Compilerを確認してください。Use debug DCUsDebugging

于 2013-11-06T15:54:34.160 に答える
2

私は何年にもわたってこれらの問題を抱えていましたが(まあ、最初の2つはとにかく)、私の無知で実際にDelphiをアンインストールして再インストールしましたが、役に立ちませんでした。最終的に、プロジェクト設定の欠如が原因であることがわかりました。少なくとも最初は、以前の Delphi からプロジェクトを移行すると、既存のプロジェクト設定が変換されますが、明らかな理由もなく、Delphi はこれを忘れ始め、プロジェクト設定の「空の」セットを提供します。Base、Release、および Debug がある Project-Options を開くと、これを確認できます。アクティブなもの (プロジェクト マネージャーでは太字になっています) を確認すると、ディレクトリ パスがなく、すべてのヒントと警告がデフォルトで表示されていることがわかります。これらのデフォルトのほとんどは問題ありませんが、「プラットフォーム シンボル」と「プラットフォーム ユニット」は無効にする必要があります (少なくとも Win32 の場合)。よろしく、ブライアン

于 2009-05-15T21:22:34.970 に答える
2

TFileOpenDialogは、Windows Vista 以降でのみ機能します。TFileOpenDialogの代わりに TOpenDialogを使用する必要があります。新しいバージョンの Delphi では、実行中の OS が検出され、適切なダイアログが表示されます。
https://forums.embarcadero.com/thread.jspa?threadID=70498

于 2013-11-06T15:16:28.923 に答える
1

特定のプラットフォーム専用に開発する場合は、プロジェクトソースを開いて追加します

{$WARN SYMBOL_PLATFORM OFF}
于 2011-01-11T11:57:13.337 に答える