Guten Tag,
habe zu diesem Thema schon einiges gelesen und schon Erfahrungen beim Erstellen von DLLs in Delphi. Die meisten Beiträge beziehen sich jedoch auf DLLs die auch von Programmen, die in anderen Sprachen geschrieben wurden, genutzt werden.
Die DLL an der gerade arbeite:
- Wird NUR von Programmen, die in der GLEICHEN Version von Delphi kompiliert wurden, angesprochen.
- Die Daten in dem Record werden in der DLL NUR GELESEN, nie verändert.
Ich übergebe an eine DLL einen Zeiger auf einen Record, der so aussieht:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| Unit xy Type PMF_Data = ^TMainFormData; TMainFormData = Record _Icon: TIcon; _Caption: TCaption; _Rect: TRect; _Handle: THandle; _WindowState: TWindowState; end; |
Die Übergabe erfolgt so:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| Function Lade_DLL(Const xMF_Data: TMainFormData): Boolean; Type TDLLFunction = Function(Const xMF_DataZeiger: PMF_Data): Boolean;
Var DLLFunction: TDLLFunction; . . Result := DLLFunction(@xMF_Data); |
In der DLL sieht das so aus:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| Uses xy;
Function Start_DLL(Const xMF_DataZeiger: PMF_Data): Boolean; Export; Var MyMF_Date: TMainFormData;
begin If xMF_DataZeiger <> nil then begin MyMF_Data := xMF_DataZeiger^; end; |
Die Übergabe scheint problemlos zu funktionieren. In der DLL komme ich an alle Daten des Records ran.
Ich kann die DLL problemlos entladen und das aufrufende Programm problemlos beenden. MemoryLeaks werden mir auch keine gemeldet.
Meine Frage, kann diese Übergabe trotzdem zu Problemen führen?
Vielen Dank für eure Hilfe.
Mit freundlichem Gruß
Hans
Moderiert von Narses: Delphi-Tags hinzugefügt