【问题标题】:WinAPI C++ how to load resources from 64-bit applicationWinAPI C++ 如何从 64 位应用程序加载资源
【发布时间】:2020-01-06 11:09:45
【问题描述】:

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

通常我会这样做

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应用程序加载资源?

【问题讨论】:

    标签: c++ winapi resources win64


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-29
      • 1970-01-01
      • 2011-05-06
      • 2023-03-07
      • 1970-01-01
      • 1970-01-01
      • 2015-03-25
      • 1970-01-01
      相关资源
      最近更新 更多