如何在C中导入DLL函数?

我正在尝试使用一个DLL。 该DLL包含函数“发送”。 这就是我所做的:

#include <stdio.h> #include <Windows.h> int main(int argc, char * argv[]) { HMODULE libHandle; if ((libHandle = LoadLibrary(TEXT("SendSMS.dll"))) == NULL) { printf("load failed\n"); return 1; } if (GetProcAddress(libHandle, "send") == NULL) { printf("GetProcAddress failed\n"); printf("%d\n", GetLastError()); return 1; } return 0; } 

GetProcAddress返回NULL,最后一个错误值是127.(程序未find)

我究竟做错了什么?

代码看起来或多或少好,所以可能是* .dll的错误。 请下载Dependency Walker应用程序,并检查该库导出的功能类型。

如果您运行的是64位环境,并且“sendsms.dll”编译为32位loadlibrary不起作用。 你需要编译你的项目为32位加载DLL。

可能DLL不会导出这样的功能。

这通常是由编译器添加到函数名称的“装饰”引起的。 例如“发送”实际上可以被看作是:

  • _send
  • _send@4
  • ?send@@ABRACADABRA

要解决这个问题,你应该这样做:

  1. 使用“depends”实用程序(depends32.exe,附带MSVC)查看您的DLL 实际导出的内容。
  2. 如果你是DLL的作者,你可以使用“def”文件(链接器)强制导出名称,

我注意到你在LoadLibrary上使用TEXT,而不是在GetProcAddress上。 如果GetProcAddress错误地解释了你的字符串,它可能正在寻找错误的函数。