Hallo,
mal angenommen ich habe einen Record der so definiert ist:
Delphi-Quellcode:
TMyReturnRec = packed record
Str1, Str2: PWideChar;
end;
In einer Funktion die den als Rückgabewert besitzt kopiere ich die Inhalte von Delphi Strings rein:
Delphi-Quellcode:
var
MyStr1, MyStr2: string;
function GetData: TMyReturnRec;
begin
GetMem(result.Str1, (Length(MyStr1) * SizeOf(WideChar)) + 1);
result := StringToWideChar(MyStr1, result.Str1, Length(MyStr1) + 1);
end;
Jetzt holt sich der Aufrufer diesen Record ab.
Nur: wer sollte wann den Speicher freigeben?
Wenn der AUfrufer ein Delphi Programm ist, welches meine Import Bibliothek benutzt,
kopiert er diese WideCHars gleich wieder in Delphi Strings und gibt mittels FreeMem
den Speicher frei:
FreeMem(MyReturnRec.Str1, Length(MyReturnRec.Str1) + 1);
Nur: wenn der Aufrufer der
DLL nicht Delphi benutzt?
Soll der "verpflichtet" weden sowas ähnliches wie dieses FreeMem aufzurufen?