我得到了一个我正在尝试使用的DLL。 DLL包含函数“send”。 这就是我所做的:
#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.(找不到过程)
我做错了什么?
答案 0 :(得分:4)
代码看起来或多或少好,所以* .dll可能有问题。请下载Dependency Walker应用程序并检查此库导出的功能类型。
答案 1 :(得分:2)
如果运行64位环境并且“sendsms.dll”编译为32位,则loadlibrary不起作用。您需要将项目编译为32位以加载dll。
答案 2 :(得分:0)
可能DLL不会导出这样的函数。
这通常是由编译器添加到函数名称的“装饰”引起的。例如,“发送”实际上可能被视为:
_send
_send@4
?send@@ABRACADABRA
要解决这个问题,那就是你应该做的事情:
答案 3 :(得分:0)
我注意到你在LoadLibrary上使用TEXT,但在GetProcAddress上没有。如果GetProcAddress误解了你的字符串,它可能正在寻找错误的函数。