如何在C中导入DLL函数?

时间:2010-08-29 12:37:15

标签: c windows dll

我得到了一个我正在尝试使用的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.(找不到过程)

我做错了什么?

4 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:2)

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

答案 2 :(得分:0)

可能DLL不会导出这样的函数。

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

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

要解决这个问题,那就是你应该做的事情:

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

答案 3 :(得分:0)

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