Forum: Object-Pascal / Delphi-Language
by DeddyH,
22. Okt 2013
Mit dem SetLength auf 0 gibst Du nur den Speicher frei, den das Array belegt, nicht aber die enthaltenen Objekte. Da wirst Du schon vorher durchiterieren müssen, auf Speicherlecks testen kann man, indem man z.B. in der *.dpr als erste Zeile nach dem "begin" ReportMemoryLeaksOnShutdown auf true setzt (ab Delphi 2006 IIRC, ansonsten FastMM nachinstallieren).
Forum: Object-Pascal / Delphi-Language
by DeddyH,
22. Okt 2013
Das wäre schön blöd, wenn die Instanzen anschließend automatisch freigegeben würden. Dem ist aber nciht so, was auch bedeutet, dass Du für den Speicher selbst verantwortlich bist. Falls nichts dagegen spricht, kannst Du Dein dynamisches Array ja gegen eine TObjectlist austauschen, die ist erstens effizienter und gibt die enthaltenen Objekte optional automatisch frei (OwnsObjects-Parameter im...
Forum: Object-Pascal / Delphi-Language
by DeddyH,
22. Okt 2013
Man kann keine Properties als Var-Parameter übergeben, siehe gepostete Fehlermeldung. Was aber ginge:
function oxWrite(const aValue:String): txString;
begin
Result := txString.Create;
Result.XSToNative(aValue);
end;
aArt.OXID := oxWrite('05848170643ab0deb9914566391c0c63');
Normalerweise bin ich ja kein Freund von Objekten als Rückgabewert, aber hier überseh ich das einfach mal.
Forum: Object-Pascal / Delphi-Language
by DeddyH,
22. Okt 2013
Kurzes Beispiel: gegeben sei die Klasse TPerson mit den Feldern Name und Vorname und ein dynamisches Array davon. Ursprungscode:
SetLength(Personen, Length(Personen) + 1);
Personen := TPerson.Create;
Personen.Vorname := 'Hans';
Personen.Name := 'Wurst';
SetLength(Personen, Length(Personen) + 1);
Personen := TPerson.Create;
Personen.Vorname := 'Reiner';
Personen.Name := 'Zufall';...
Forum: Object-Pascal / Delphi-Language
by DeddyH,
22. Okt 2013
Sicher geht das, Du musst halt die Werte als Parameter übergeben, das ganze SetLength()-, Create()- und Zuweisungs-Gedöns geschieht dann eben in dieser Prozedur.