我在尝试使用
LoadLibrary()
和 GetProcAddress()
在我的 Visual Studio 2019 项目中加载 x86 DLL 文件时遇到问题。我的项目由两部分组成,Add32 和 Test32。 Add32 项目在 x86 体系结构中构建一个 DLL 文件,其中包含一个将两个数字相加的函数。 Test32 项目在 x86 架构中运行,并使用 LoadLibrary() 和 GetProcAddress()
加载 Add32.dll 文件。但是GetProcAddress()
加载时返回null,提示出错
我已确认该问题在 Windows 10 x86 中仍然存在,并且
GetLastError()
处的 GetProcAddress()
函数返回错误代码 127。
请注意,x86 配置的两个项目都没有任何错误地构建,并且在执行 Test32 项目时得出上述结论。
使用 x64 配置构建的相同项目工作得很好。构建和执行期间没有错误。
动态链接代码
extern "C" __declspec(dllexport) int __stdcall sum(int a, int b) {
return a + b;
}
测试代码
#include <iostream>
#include <Windows.h>
using namespace std;
typedef int (*add)(int, int);
int main() {
HINSTANCE dll = LoadLibrary(TEXT("Add32.dll"));
if (!dll) {
cout << "Failed DLL" << endl;
cout << "DLL Error: " << GetLastError() << endl;
return -1;
}
add a = reinterpret_cast<add>(GetProcAddress(dll, "sum"));
if (!a) {
cout << "Failed Function" << endl;
// Code comes here and shows the 127 error code.
cout << "Function Error: " <<GetLastError()<< endl;
}
cout << a(2, 3) << endl;
return 0;
}
什么可能导致这个问题,我该如何解决?
我已尝试通过确保正确构建 DLL 文件并包含正确的函数来解决此问题,但问题仍然存在。我还尝试运行 dumpbin 以确保正确导出函数,这也证实了这一点。