我正在尝试使用一个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
要解决这个问题,你应该这样做:
我注意到你在LoadLibrary上使用TEXT,而不是在GetProcAddress上。 如果GetProcAddress错误地解释了你的字符串,它可能正在寻找错误的函数。