Hallo,
ich habe eine DLL (ohne Quellcode), die ich gezielt zurücksetzen können muss. Da die DLL keine Initialisierungsprozedur exportiert, wollte ich die DLL entladen und anschließend neu laden. Damit müsste die DLL neu initialisiert sein oder irre ich hier schon?
Ich kann die DLL ohne Probleme laden, die exportierte Prozedur nutzen und die DLL anschließend wieder entladen. Wenn ich aber versuche, die DLL erneut zu laden, erhalte ich E/A-Fehler 32. Weiß jemand, was dieser Fehler besagt, bzw. sogar was ich falsch mache?
Interessant ist auch, dass der Fehler nicht durch einen try...except Block um den Aufruf von LoadLibrary abgefangen wird, müsste ich hier zusätzlich das Fehlerhandling ausschalten {$I-} und manuell auf IOResult prüfen?
So, nun noch etwas Code um zu zeigen, was ich eigentlich mache:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
| var DllHandle: Thandle; MyFunc: TMyFunc; dllname: string; : : try DllHandle:=LoadLibrary(pchar(dllname)); except on E: Exception do end; try @MyProc:=GetProcAddress(DllHandle, 'SomeProc'); except on E: Exception do end; : : try FreeLibrary(DllHandle); except on E: Exception do end; |
Ich hoffe, ich mache keinen zu großen Anfängerfehler und wäre für jeden Hinweis dankbar!
Lars