Ken White によって提案された EnumResourceNames は完全に機能し、実装は非常に簡単です。彼はコメントだけを残したので、答えとして受け入れることができませんでした。
これが提案を使用した私の解決策です。
画像をロードする手順内に、次のコード行を追加しました。
var
returnVal:bool;
hMdl: HMODULE;
begin
hMdl:=LoadLibraryEX('FileNameWithResources.exe',0,LOAD_LIBRARY_AS_DATAFILE);
// I load bitmaps so RT_BITMAP parameter is chosen
returnVal:=EnumResourceNames(hMdl,RT_BITMAP,@Callback,0);
@callback 関数はブール値を返します。クラスの実装コードの前に、これをクラスレベルに配置する必要があります。それについての宣言はありません。私のクラスはシングルトンなので、クラス レベルの手順を呼び出して TStringList に値を追加します。より複雑な if ステートメントがあり、すべてをループしたい場合は、false を返さないでください。いつでも false を返すと、この関数の呼び出しが終了し、残りのリソース名を取得できなくなります。
function Callback(handle:THandle;ResType:PChar;ResName:Pchar;long:Lparam):bool;stdcall;
var
tempString: string;
begin
tempString := resname;
if length(tempString) > 0 then begin
MyClassName.AddToResourceNames(tempString);
result := true;
end else
result := false;
end;