Hallo,
ich habe eine
DLL mit einer Form:
Delphi-Quellcode:
library PFormularMan;
uses
SysUtils,
Classes,
ufoMainForm in 'ufoMainForm.pas' {Mainform},
uFormElements in 'uFormElements.pas',
uPageManagement in 'uPageManagement.pas';
{$R *.res}
var mf: TMainform;
function Execute(param: Integer):Boolean; stdcall;
begin
mf := TMainform.Create(nil);
mf.Show;
Result := true;
end;
procedure DeInit; stdcall;
begin
if assigned(mf) then
begin
mf.Close;
mf.Free;
end;
end;
exports
Execute,DeInit;
begin
end.
Das ist der komplette Code.
Wenn ich das Formular schließe und dann FreeLibrary aufrufe (von aussen natürlcih), bekomme ich eine
AV an 0. Ich wollte deswegen vorher prüfen, ob die
DLL noch da ist:
Delphi-Quellcode:
function UnLoad(Rec: TModuleRec): Boolean;
begin
Result := false;
Rec.Handle := GetModuleHandle(PChar(rec.
Name));
Showmessage(PChar('
ModuleHandle by GetNoduleHandle: ' + IntToStr(Rec.Handle)));
if Rec.Handle <> 0
then
begin
Rec.DeInitFunc;
FreeLibrary(Rec.Handle); <--
AV hier
Result := true;
end;
end;
GetModuleHandle gibt ein
Handle zurück - allerdings kann ich das nicht mit FreeLibrary freigeben, wie bereits gesagt, FreeLibrary löst eine
AV an 0 aus.
Rufe ich FreeLibrary (also UnLoad) auf, während die Form noch angezeigt wird, gibt es keine Probleme.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1