Reputation: 61
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");
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?
Upvotes: 5
Views: 13164
Reputation: 705
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.
Upvotes: 2
Reputation: 146940
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.
Upvotes: 0
Reputation: 12943
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:
Upvotes: 0
Reputation: 2640
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.
Upvotes: 4