开发者

How to import a DLL function in C?

I was given a DLL that I'm trying to use. The DLL contains the function "send". this is what I did:

#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");
   开发者_JAVA百科     printf("%d\n", GetLastError());
        return 1;
    }
    return 0;
}

GetProcAddress returns NULL, and the last error value is 127. (procedure was not found)

What am I doing wrong?


Code look more or less good, so probably something is wrong with *.dll. Please download Dependency Walker application and check what kind of functions are exported by this library.


If you running 64bit environment and "sendsms.dll" is compiled as 32bit loadlibrary does not work. You need to compile your project as 32bit to load dlls.


Probably the DLL doesn't export such a function.

This is usually caused by the "decorations" the compiler adds to the function name. For instance "send" may actually be seen as:

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

To resolve this that's what you should do:

  1. Use the "depends" utility (depends32.exe, shipped with MSVC) to view what your DLL actually exports.
  2. If you're the author of the DLL - you may force the export name to be what you want, by using "def" file (for linker)


I noticed that you're using TEXT on LoadLibrary, but not on GetProcAddress. If GetProcAddress is misinterpreting your string, it could be looking for the wrong function.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜