Autor Beitrag
lars-rd
Hält's aus hier
Beiträge: 1

Win XP
Delphi 5, Delphi 2005 Prof.
BeitragVerfasst: Mi 18.01.06 21:47 
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:

ausblenden 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    // […]  Code zur Fehlerbehandlung 
  end;
  try
   @MyProc:=GetProcAddress(DllHandle, 'SomeProc');
  except
   on E: Exception do    // […]  Code zur Fehlerbehandlung
  end;
  :
  :
  try
    FreeLibrary(DllHandle);
  except
    on E: Exception do   // […]  Code zur Fehlerbehandlung
  end;


Ich hoffe, ich mache keinen zu großen Anfängerfehler und wäre für jeden Hinweis dankbar!

Lars