繁体   English   中英

WinAPI C++ 如何从 64 位应用程序加载资源

[英]WinAPI C++ how to load resources from 64-bit application

我想从 EXE 加载资源。 例如,我想从 EXE path加载版本信息RT_VERSION

通常我会这样做

HMODULE lib = LoadLibrary(path);

HRSRC resVersion = FindResource(lib, MAKEINTRESOURCE(1), RT_VERSION);
DWORD resVersionSize = SizeofResource(lib, resVersion);
HGLOBAL resVersionLoad = LoadResource(lib, resVersion);
LPVOID resVersionData = LockResource(lib);

但是当path的 exe 是一个 win-64 应用程序时, LoadLibrary失败并显示ERROR_BAD_EXE_FORMAT : %1 is not a valid Win32 application. 无论如何从win-64应用程序加载资源?

Windows 只允许您将相同位数的模块加载到进程中。 当您调用LoadLibrary ,系统假定您将使用该模块,并执行通常的初始化。 为了防止您需要调用LoadLibraryEx ,传递LOAD_LIBRARY_AS_IMAGE_RESOURCE标志:

如果使用此值,系统会将文件作为映像文件映射到进程的虚拟地址空间。 但是,加载器不会加载静态导入或执行其他常见的初始化步骤。 当您只想加载 DLL 以从中提取消息或资源时使用此标志。

除非应用程序依赖于具有图像内存布局的文件,否则该值应该与LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVELOAD_LIBRARY_AS_DATAFILE 有关更多信息,请参阅备注部分。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM