我已将多个资源嵌入到可执行文件中,例如语言(文本)文件。
您可以在下面看到Languages.rc
文件的内容:
Language_English RCDATA Languages\English.ini
Language_German RCDATA Languages\German.ini
Language_Czech RCDATA Languages\Czech.ini
我找到this answer,这肯定有帮助,但是我很难实现它。
答案 0 :(得分:0)
假设您想要将这些资源的列表作为EOL分隔的字符串,那么第一步就是定义EnumRCDataProc
函数:
function EnumRCDataProc(hModule: HMODULE; lpszType, lpszName: PChar; lParam: NativeInt): BOOL; stdcall;
begin
TStrings(lParam).Add(lpszName);
Result := True;
end;
完成后,我们就可以开始工作了:
function EnumerateRCDataResourceNames: string;
var
ExecutableHandle: HMODULE;
ResourcesList: TStringList;
begin
ExecutableHandle := LoadLibraryEx(PChar(Application.ExeName), 0, LOAD_LIBRARY_AS_DATAFILE);
try
ResourcesList := TStringList.Create;
try
EnumResourceNames(ExecutableHandle, RT_RCDATA, @EnumRCDataProc, NativeInt(ResourcesList));
Result := ResourcesList.Text;
finally
ResourcesList.Free;
end;
finally
FreeLibrary(ExecutableHandle);
end;
end;
说明:
与原始答案(请参阅问题)一样,不能使用LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE
或LOAD_LIBRARY_AS_IMAGE_RESOURCE
,因为这些类型不再在Delphi XE6中定义,至少是AFAIK。< / p>
但是,根据MSDN:
,您可以定义这些常量LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE
= $00000040
LOAD_LIBRARY_AS_IMAGE_RESOURCE
= $00000020