Einzelnen Beitrag anzeigen

DarKlajid

Registriert seit: 14. Jul 2004
5 Beiträge
 
Delphi 7 Professional
 
#3

Re: Memleak, vermutlich bei VarArray/PSafeArray Nutzung

  Alt 13. Mär 2006, 14:04
Zitat von shmia:
Delphi-Quellcode:
// falsch:
// Interface-Zeiger werden als var-Parameter übergeben
procedure TMyType.CopyForms(var p_Param1 : IMyComType; var p_Param2 : IMyComType2; var p_Param3 : TStringList);

// richtig:
// Interface-Zeiger werden by Value übergeben
// auch Delphi-Objekte werden by Value übergeben
procedure TMyType.CopyForms(p_Param1 : IMyComType; p_Param2 : IMyComType2; p_Param3 : TStringList);
Danke für die (knappe?) Antwort. Leider ändert das nichts an meinem Verhalten/Problem.
Will sagen:

- Funktioniert wie gehabt
- Leakt wie gehabt (laut MemProof halt genau in dieser Funktion und zwar eine Unmenge an Strings..)

Ich hab die Funktion "komprimiert" in:

Delphi-Quellcode:
procedure TMyType.CopyForms(p_Param1 : IMyComType; p_Param2 : IMyComType2; p_Param3 : TStringList);
var
  vFormNames : Variant;
begin
  try // try-finally
    vFormNames := VarArrayFromStrings(p_Param3);

    p_Param1.CopyForms(p_Param2, PSafeArray(TVarData(vFormNames).VArray), False);
  finally
    Finalize(vFormNames);
    vFormNames := Unassigned;
  end;
end;
Vorher war es die Zeile:
FormNames[iNameIndex] := p_Param3[iNameIndex]; Jetzt ist es:
vFormNames := VarArrayFromStrings(p_Param3); Der Stacktrace des Leaks ist über diesen Zeilen:
Zitat:
system.pas - WStrFromPWCharLen
variants.pas - VarFromWStr
meineUnit - DieZeileVonOben
Danke im voraus für jede Hilfe,
Ben
  Mit Zitat antworten Zitat