.RC ファイルの一部のリソースは、.RC ファイルで指定された ID を持つ結果の .exe では使用できません。ID 10000、10100 などのリソース文字列を含む RC ファイルがあります。何らかの理由で、ID 10000 (LoadStr(10000)) のリソースをロードすると、別の文字列 ('Invalid field type.' - midas.rc で宣言されている) がロードされます。 VCL からのもので、同じ ID を持っています)。
同じ ID を持つリソースは、ビルド中に "[Error] WARNING. Duplicate resource(s)" につながると想定しました。ただし、リンカー関連の警告はありません。
ps私はDelphi 2010を使用しています。
アップデート:
- この問題の回避策は、id を 10000 から別のものに変更することです。10050、例えば
質問:
- 重複リソースに関する警告がないのはなぜですか?
- 将来その問題を防ぐために何ができるでしょうか?
株式会社マイプロジェクト
const
offLanguages = 10000;
offCurrencies = 10100;
myproject.RC ファイル
LANGUAGE LANG_LATVIAN, SUBLANG_NEUTRAL
#include "myproject.inc"
STRINGTABLE
{
offLanguages+0, "LV"
}
.. etc...
Rc ファイルは myproject.res ファイルにコンパイルされます。結果の.resファイルには、ID 10000の正しい文字列「LV」があります(リソースエディターで確認しました)。
Delphi coude では、LoadStr 関数を使用してユニットの初期化部分にリソースがロードされます。
likeThat.pas:
unit likeThat;
interface
{$I *.inc}
{$R *.res}
// skipped
initialization
Assert(LoadStr( offLanguages )= 'LV'); // <== fails here