有没有办法加载32位DLL库(与
LoadLibrary
具有相同用法的东西)我想与GetProcAddress
一起使用该函数。
我看了WOW,但它似乎没有提供该功能。该功能应该存在,因为像 DependencyWalker 这样的工具能够读取 32 位 DLL 的符号,即使它是 64 位的。
当您将 DLL 作为数据文件加载时,只能将 32 位 DLL 加载到 64 位进程中。您无法执行该代码。 (http://support.microsoft.com/kb/282423)
Microsoft 建议您使用进程间 COM 来将 32 位代码与 64 位应用程序结合使用。 这里有一篇文章解释了该过程。
如果您只想从中获取资源,您可以作为数据文件加载:
LoadLibraryEx(exeName, NULL, LOAD_LIBRARY_AS_DATAFILE);
然后照常拨打
FindResource
。
读取 32 位可执行文件和在 32 位可执行文件中执行代码之间存在差异。我不相信 Windows 提供任何功能来做到这一点。
您可能能够做到这一点的唯一方法是创建一个加载 dll 的 32 位进程,然后进行进程间通信以在两个进程之间传递结果。
理论上我已经实现了一种方法。
https://www.codeproject.com/Articles/5336312/Load-a-x86-DLL-into-a-x64-Executable-Mission-Possi
它基于在长模式兼容性段上跳转。有关 x64 理论和细分的更多信息,请参阅我的 Intel Assembly Manual。
代码这里演示了所有这些理论。
实际上,它还不能与 win32 Dll 一起工作。我还在努力。