C++中的GetProcAddress函数

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地址.有几种可能的情况:

  1. 没有命名的导出函数GetNumber
  2. 有一个名为的导出函数GetNumber,但它没有标记extern "c",导致名称损坏.
  3. hDLL 不是有效的库句柄.

如果结果是#1,你需要通过如下装饰声明来导出函数__declspec(dllexport):

MyFile.h

__declspec(dllexport) int GetNumber();
Run Code Online (Sandbox Code Playgroud)

如果结果是#2,你需要这样做:

extern "C"
{
  __declspec(dllexport) int GetNumber();
};
Run Code Online (Sandbox Code Playgroud)