LoadLibrary, wie lade ich eine DLL
-
Hallo,
ich habe im Forum schon eine Menge Beiträge zum Thema gefunden,
aber ich habe bis jetzt noch keinen Erfolg beim selbst ausprobieren
gehabt. Darum bitte ich mal hier um Hilfe mir das Laden von DLL
zu erklären.Was ich bisher gemacht habe:
Ich erstellte eine DLL (meintest.dll) mit folgender Funktion:
__declspec (dllexport) void test(void) { CString hallo; hallo="dies ist ein Test"; MessageBox(NULL, hallo, "testbox", MB_OK); }
Dann habe ich diese DLL erstellt. Danach erzeugte ich eine Exe die
nur einen Button hat, der die DLL die ich in das Verzeichnis der Exe
kopiert habe, nun laden soll.Das Laden der Funktion aus der Dll ist mein großes Verständnisproblem!!
Ich weiss ich muss LoadLibrary verwenden:
HINSTANCE hMod = LoadLibrary("meintest.dll"); //in etwa so ?!
Aber wie kann ich nun die Funktion test() zuweisen und aufrufen ?
Der Aufruf müsste dann doch nach erfolgter Zuweisung test(); sein oder ?
-
GetProcAddress
-
Hab mir das mit GetProcAddress angesehen.
Ich habe folgendes versucht:
void (*pFunc)(); HMODULE hMod = LoadLibrary("meintest.dll"); //DLL laden pFunc = GetProcAddress(hMod, "test"); if (pFunc) (*pFunc)();
Und erhalte den Fehler:
'FARPROC' kann nicht in 'void (__cdecl *)(void)' konvertiert werdenDas verstehe ich nicht
-
Ok, ich habe das nun mit diesem Zusatz:
FARPROC pFunc;
hinbekommen. Aber die Funktion der DLL wird leider als
?test@@YXZY oder so in der Art exportiert.Kann man das beinflussen ? So dass sie wirklich nur als
"test" ausgewiesen wird ?
-
#define PLUG_API __declspec(dllexport)
extern "C" PLUG_API void test(void);
Du musst sie auch (einfach bezeichnet) als C-Funktion exportieren.