DLL verzögert laden/einbinden
-
HI!
Das geht via WinAPI und das ganze nennt man im Fach Cinesisch "Explizites Laden von DLLs":
Als erstes musst du die winbase.h mit #inlcude einbinden.
Mit "LoadLibrary(LPCTSTR dateiname)" lädst du die datei in deine anwendung.
Wenn erfolgreich ist die rückgabe der Funktion das Handle der DLL ansonsten
0.Mit "GetProcAddress(HMODULE handle, LPCSTR funkt_name)" kannst du die funktion
dann ausführen (der wert von funkt_name muss identisch mit dem in der DLL sein.)
Wenn das erfolgreich war bekommst du den rückgabe wert der Funktion zurückl ansonsten 0.Wenn du noch fragen hast frag einfach

-
Ach hab vergessen zu sagen:
FreeLibrary(handle) wendest du an wenn du die DLL nimmer benötigst
-
Hi Frey
ich habe es jetzt so:
In EXE zum laden der DLL:
HMODULE hMod = LoadLibrary("test.dll"); GetProcAddress(hMod, "myFunction");in der DLL ist myFunction so hinterlegt:
__declspec (dllexport) void myFunction(void) { MessageBox(NULL, "test", "testbox", MB_OK); }winbase.h ist inkludiert alles läst sich ausführen, aber
die funktion wird nicht aufgerufen. Wo hab ich den Fehler ?
Kann ich bei LoadLibrary("test.dll"); auch den ganzen Pfad
zur DLL "c:\\ab\\cd\\test.dll" angeben ?
Im Moment liegt die test.dll im Exe-Ordner.
-
SChonmal Debug gemacht was LoadLIb zurückgibt.
-
HI!
Du musst die Var mit typedef definieren also so:
(ich sage jetzt einfach mal dass deine funk. nen int zurück gbit.)typedef int __stdcall TmyFunktion(bool param1); HINSTANCE hMod = LoadLibrary("test.dll"); TmyFunktion* funct = (TmyFunktion*)GetProcAddress(hMod, "myFunction");Das gibt dir zwar ZUrück führt die funktion aber aus.
-
Das gibt dir zwar ZUrück führt die funktion aber aus.
Nach so einem Satz braucht man sich echt nicht wundern wenn immer wieder rückfragen kommen.
Ich nehme jetzt mal an das soll heißen: "GetProcAddress gibt dir zwar die Adresse der Funktion zurück, führt sie aber nicht aus."
-
HI Sorry ich hab mich vertippt ich wollte schreiben:
Das gibt dir zwar 0 zurück führt die funktion aber aus.
-
Also ich habe es jetzt mal wie beschrieben probiert, allerdings
wird meine MessageBox nicht angezeigt. Hab ich evtl in der dll
falsch exportiert ? Den int muss ich ja auch abändern...
-
Hallo Frey_2,
evtl. stelle ich mich ja auch nur einfach mal wieder zu doof an

Aber ich hoffe du guckst hier mal wieder in den Thread rein
Gruß
Chris
-
Ok ich habe jetzt so ziemlich in google alles durch was auf
LoadLibrary verweist
Und wirklich keinen Bock mehr zu suchen.
Kann mir nicht BITTE jemand sagen wie ich die Funktion mit dem
Aufruf einer MessageBox(!) aus einer dynamisch zu ladenden DLL laden
kann ?Header des DLL-Projekt ist auch schon included in Exe-Projekt.
Chris