Ali*_*eza 16 c++ dll loadlibrary getprocaddress
大家好:我已经在我的项目中加载了我的DLL,但每当我使用GetProcAddress函数时.它返回NULL!我该怎么办?我在"MYDLL.dll"中使用此函数(双GetNumber(double x))
这是我使用的代码:
typedef double (*LPGETNUMBER)(double Nbr);
HINSTANCE hDLL = NULL;
LPGETNUMBER lpGetNumber;
hDLL = LoadLibrary(L"MYDLL.DLL");
lpGetNumber = (LPGETNUMBER)GetProcAddress((HMODULE)hDLL, "GetNumber");
Run Code Online (Sandbox Code Playgroud)
Joh*_*ing 43
检查返回代码和通话GetLastError()
将使您自由.你应该在这里检查两次返回代码.您实际上是在零次检查返回代码.
hDLL = LoadLibrary(L"MYDLL.DLL");
Run Code Online (Sandbox Code Playgroud)
检查hDLL
.它是NULL吗?如果是这样,请打电话GetLastError()
找出原因.它可能像"找不到文件"一样简单.
lpGetNumber = (LPGETNUMBER)GetProcAddress((HMODULE)hDLL, "GetNumber");
Run Code Online (Sandbox Code Playgroud)
如果lpGetNumber
为NULL,则调用GetLastError()
.它会告诉你为什么无法找到proc地址.有几种可能的情况:
GetNumber
GetNumber
,但它没有标记extern "c"
,导致名称损坏.hDLL
不是有效的库句柄.如果结果是#1,你需要通过如下装饰声明来导出函数__declspec(dllexport)
:
__declspec(dllexport) int GetNumber();
Run Code Online (Sandbox Code Playgroud)
如果结果是#2,你需要这样做:
extern "C"
{
__declspec(dllexport) int GetNumber();
};
Run Code Online (Sandbox Code Playgroud)