Hallo zusammen,
habe jetzt schon ein gutes Stück meiner
DLL fertig. Wie von Fritzew vorgeschlagen habe ich mir auch eine FreeAllocatedMemory() Procedure geschrieben die den angeforderten Speicher wieder freigibt, wenn die Informationen angekommen und zwischengespeichert sind. Funktioniert nach ein paar Tests so wie gewünscht.
Ich hoffe es bleibt auch dabei.
Delphi-Quellcode:
procedure TDMSUserManager.FreeAllocatedMemory(var UserExchange: array of TUserExchange);
var
i: Integer;
begin
for i := Low(UserExchange) to High(UserExchange) do begin
if Assigned(UserExchange[i].UserName) then
StrDispose(UserExchange[i].UserName);
if Assigned(UserExchange[i].FirstName) then
StrDispose(UserExchange[i].FirstName);
if Assigned(UserExchange[i].LastName) then
StrDispose(UserExchange[i].LastName);
if Assigned(UserExchange[i].EMail) then
StrDispose(UserExchange[i].EMail);
if Assigned(UserExchange[i].Password) then
StrDispose(UserExchange[i].Password);
end;
end;
Jetzt wäre die Frage, ob es hier eine einfache Möglichkeit gibt, alle PChars automatisch freizugeben?!
Funktioniert da so etwas wie
Finalize()
? Habe es jetzt nicht ausprobiert da ich nicht weiß, ob das unter Umständen später zu Problemen führen kann. Falls ich mal meinen Record erweitern möchte (muss ja nicht dieser hier sein), dann müsste ich immer daran denken, die Strings auch wieder freizugeben. Sollte zwar in einem Zug mit dem Anfordern passieren, aber man vergisst ja gerne mal was.