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;