Wenn wir eine unbekannte Funktion in C++-Code haben, tun wir normalerweise folgendes:
/* declare the function */
int MyFunction(char *, int);
int main(void)
{
return MyFunction("hello", 5);
}
/* our function */
int MyFunction(char *, int)
{
/* do something */
return 0;
}
Doch wir haben die Funktion in einer DLL. Die DLL ist beispielsweise im Rootverzeichnis des C:\-Laufwerks und heißt "MyDLL.dll". Sie enthält die Funktion "MyFunction". Nun erstellen wir eine Funktion, die die DLL-Funktion rufen kann:
int CallMyDLL(void)
{
/* get handle to dll */
HINSTANCE hGetProcIDDLL = LoadLibrary("C:\\MyDLL.dll");
/* get pointer to the function in the dll*/
FARPROC lpfnGetProcessID = GetProcAddress(HMODULE
(hGetProcIDDLL), "MyFunction");
/*
Define the Function in the DLL for reuse. This is just prototyping
the dll's function. A mock of it. Use "stdcall" for maximum
compatibility.
*/
typedef int (__stdcall * pICFUNC)(char *, int);
pICFUNC MyFunction;
MyFunction = pICFUNC(lpfnGetProcessID);
/* The actual call to the function contained in the dll */
int intMyReturnVal = MyFunction("hello", 5);
/* Release the Dll */
FreeLibrary(hGetProcIDDLL);
/* The return val from the dll */
return intMyReturnVal;
}
----
Tools zum Sichten von DLLs:
dumpbin, depends