Erhalte bei der verwendung von Interfaces und nachfolgenden Units die Meldung
Code: Alles auswählen
Test.lpr(1,1) Fatal: Can't find unit Interfaces used by Test
Code: Alles auswählen
Test.lpr(1,1) Fatal: Can't find unit Interfaces used by Test
MmVisual hat geschrieben:Ich habe hier einen Trick. Jetzt ist die Form echt Modal.
Der Haken: Wenn die EXE beendet wird, kommen gaaanz viele Adressen mit Zugriffsverletzung.
Code: Alles auswählen
procedure ShowText(AText: String); stdcall;
begin
if not Assigned(Form1) then begin
try
Form1 := TForm1.Create(Application);
Form1.Memo1.Text := AText;
Form1.ShowModal;
finally
FreeAndNil(Form1);
end;
end else begin
Form1.Memo1.Text := AText;
Form1.SetFocus;
end;
end;
procedure HideForm; stdcall;
begin
if Assigned(Form1) then
Form1.Close;
end;
exports
ShowText, HideForm;
begin
Application.Initialize;
end.
khh hat geschrieben:Wenn das mit einem Formular funktioniert, sollte es ja auch möglich sein andere Klassen in DLLs auszulagern, oder ?
Code: Alles auswählen
Initialization
Begin
DLLHandle := 0;
slDllFunctions := TStringList.Create;
End;
Finalization
Begin
//UnLoadDLL(); // <<< Die Zeile mit CloseHandle(DLLHandle); drin
slDllFunctions.Free;
End;
Code: Alles auswählen
procedure TForm1.Button1Click(Sender: TObject);
type
TMyProc = procedure (AText: String);stdcall;
var
DllHandle: TLibHandle;
MyProc: TMyProc;
begin
try
DllHandle := LoadLibrary('server.dll');
MyProc := TMyProc(GetProcedureAddress(DllHandle, 'ShowText'));
MyProc('Blubb');
finally
UnloadLibrary(DllHandle);
end;
end;
MmVisual hat geschrieben:Was macht das "UnloadLibrary"?
Bei Windows müsste dies in der Regel auch die Win API Funktion CloseHandle(THandle); aufrufen. Ein UnloadLibrary() habe ich nicht.