[英]How can I use P/Invoke to call a 64-bit C++ DLL from a 64-bit C# Application?
[英]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_EXCLUSIVE
或LOAD_LIBRARY_AS_DATAFILE
。 有关更多信息,请参阅备注部分。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.