loadlibrary?
-
hi leute!
wie kann ich eine dll dynamisch laden??
irgendwas mit loadlibrary? wie schaut das aus die brauch ich ja nur in der main laden oder? dann beim forom destroy wieder freiben oder wie macht ma das??so irgendwie:????????
char *Lib = "User32.dll"; // DLL laden hmod = LoadLibrary(Lib); if(hmod == NULL) { printf("%s wurde nicht gefunden\n",Lib); return(-1); } // Freigeben der Dll, damit sie auch wieder aus dem // Speicher entfernt werden kann FreeLibrary(hmod);
was ist da hmod ?
mfg nike.
-
wie kann ich eine dll dynamisch laden??
Der Code den du gepostet hast sollte funktionieren. Da fehlt aber noch die Deklaration von der Variable "hmod." Sollte so aussehen: HMODULE hmod;
hmod bedeutet "Handle to Module". Ist also eine Variable, mit der nur Funktionen wie LoadLibrary, FreeLibrary etc. was anfangen können.Nachdem du eine Dll geladen hast solltest du unter Umständen verhindern, dass sie wieder geladen wird. Wenn das Programm terminiert, oder wenn du die Dll nicht mehr brauchst solltest du die Dll wieder freigeben...
-
habs nuns so:
im create form hab ich:char *Lib = "User32.dll"; // DLL laden HMODULE hmod = LoadLibrary(Lib); if(hmod == NULL) { printf("%s wurde nicht gefunden\n",Lib); return(-1); }
im destroy form:
// Freigeben der Dll, damit sie auch wieder aus dem // Speicher entfernt werden kann FreeLibrary(hmod);
Wie kann ich verhindern, wenn die dll schon geladen ist, dass sie nicht wieder geladen wird, wenn das programm eventuell terminiert???
ich benutze ab und zu borland builder...müsste der code auch da klappen oder?cu nike.
-
Wie kann ich verhindern, wenn die dll schon geladen ist, dass sie nicht wieder geladen wird, wenn das programm eventuell terminiert???
Auf diese Weise:
HMODULE hmod; if(!GetModuleHandle(Lib)) hmod = LoadLibrary(Lib);
Ich verstehe nicht genau was du meinst mit "wenn das programm eventuell terminiert".
-
ja wenn das programm das die dll dynamisch ladet .....vielleicht mal abstürzt und es nicht zu freelibrary kommt....so mein ich das..
thx..cu
-
im form load: char *Lib = "macromedia.dll"; // wenn die dll schon geladen ist, verhindern das die dll nochmal geladen wird // dafür is das GetModuleHandle da... if(!GetModuleHandle(Lib)) { // DLL laden HMODULE hmod = LoadLibrary(Lib); if(hmod == NULL) { printf("%s wurde nicht gefunden\n",Lib); return(-1); } } im destroy form: // Freigeben der Dll, damit sie auch wieder aus dem // Speicher entfernt werden kann FreeLibrary(hmod);
müsste alles passen?;-)
danke dir mal!!cu
-
Windows räumt auf wenn deine Anwendung plötzlich abbricht. D.h. alle Speicher Ressourcen, inklusive Threads und DLL's werden frei gegeben (denke ich mal).
Deshalb wäre es sinnlos zu überprüfen ob die DLL bereits geladen ist oder nicht..
-
Der Code sollte passen. Aber eine Frage stellt sich mir. Da steht ja "im form load" und "im destroy" form. Sind das getrennte Funktionen? Kommt die hmod Variable auch sicher dort hin?
-
im form load: char *Lib = "macromedia.dll"; // wenn die dll schon geladen ist, verhindern das die dll nochmal geladen wird // dafür is das GetModuleHandle da... if(!GetModuleHandle(Lib)) { // DLL laden HMODULE hmod = LoadLibrary(Lib); if(hmod == NULL) { printf("%s wurde nicht gefunden\n",Lib); return(-1); } } im destroy form: // Freigeben der Dll, damit sie auch wieder aus dem // Speicher entfernt werden kann HMODULE hmod FreeLibrary(hmod);
hatte die HModul hmod im destroy form vergessen;-)
cu, thx n omal!
-
moin meister ...
wie ist es wenn Du mal hMode als Klassenvariable anlegst.
So wie Du es machst ist hMode bei FreeLibrary nicht initalisiert, und schon
garnicht durch LoadLibrary ...Die dll wird so nicht freigegeben.
Klasse Form:
private:
HMODULE hmod;in den Mothoden dann nur noch
...
// HMODULE hmod = LoadLibrary(Lib); weg damit
hmod = LoadLibrary(Lib); // richtiger// Freigeben der Dll, damit sie auch wieder aus dem
// Speicher entfernt werden kann
// HMODULE hmod - weg damit !!!
FreeLibrary(hmod);mfg
RB