1.) Keine Strings in
DLL verwenden *schauder* ... Lieber PChar und schön mit GetMem Speicher dafür reservern ... wie im guten alten C. ^^ Zu ShareMem sag ich jetzt nix. Bin ich kein Fan von.
2.) Wie rufst du die Funktion auf? Ich würde das so machen (ungetestet):
Delphi-Quellcode:
Hauptprojekt:
var
MyPChar: PChar;
begin
MyPChar := DoGUIActions (Integer (Self));
// ...
FreeMem (MyPChar);
end;
DLL:
function DoGUIActions(ParentForm: Integer): PChar;
stdcall;
var
Button: TButton;
begin
Button := TButton.Create(TForm (ParentForm));
with Button
do
begin
Parent := TForm (ParentForm);
// << -- !!
Caption := '
Hallo';
Name := '
cmdTest';
Left := 10;
Top := 10;
Visible := True;
end;
GetMem (Result, Length (Button.Caption));
StrCopy (Result, PChar (Button.Caption));
end;