Jetzt klappt es endlich! Aber ich glaube das ist zu kompliziert für mich. Ein 2x TNamespace zeigt mir die Delphi-
IDE als Leak an. madExcept zeigt es hier an mit "TNamespace.Create".
Delphi-Quellcode:
constructor TNamespace.Create(PIDL: PItemIdList; AParent: TNamespace);
{ Pass the PIDL of a Namespace Object Folder to create along with its parent }
{ to create a new TNamespace. }
begin
inherited Create;
FParent := AParent;
FShellCache.Data.SmallIcon := -1;
FShellCache.Data.SmallOpenIcon := -1;
FShellCache.Data.OverlayIndex := -1;
FShellCache.Data.OverlayIconIndex := -1;
IconCache := -1;
Include(FStates, nsShellDetailsSupported); // Be optomistic
Include(FStates, nsShellFolder2Supported); // Be optomistic
Include(FStates, nsShellOverlaySupported); // Be optomistic
FreePIDLOnDestroy := True;
FNamespaceID := SHELL_NAMESPACE_ID;
{ It is the Root Folder since it has no parent }
if not Assigned(AParent) then
begin
{ Either a nil for PID or if the PID is the Desktop PIDL means a full tree }
if not Assigned(PIDL) or PIDLMgr.IsDesktopFolder(PIDL) then
begin
{ If PID is already assigned then use it }
if not Assigned(PIDL) then
SHGetSpecialFolderLocation(ParentWnd, CSIDL_DESKTOP, FRelativePIDL)
else
FRelativePIDL := PIDL;
FAbsolutePIDL := FRelativePIDL;
end else
{ The PIDL is the Root PIDL but is NOT the Desktop namespace it is a }
{ FULLY QUALIFIED PIDL to a namespace that is to be the Root. }
begin
FAbsolutePIDL := PIDL;
FRelativePIDL := PIDLMgr.GetPointerToLastID(FAbsolutePIDL);
end;
end else
{ If the folder is a child of the desktop special conditions apply see above }
if PIDLMgr.IsDesktopFolder(AParent.AbsolutePIDL) then
begin
FRelativePIDL := PIDL;
FAbsolutePIDL := PIDL;
end else
{ Normal building of the PIDLs and Shells }
begin
FAbsolutePIDL := PIDLMgr.AppendPIDL(AParent.FAbsolutePIDL, PIDL);
FRelativePIDL := PIDLMgr.GetPointerToLastID(FAbsolutePIDL);
PIDLMgr.FreePIDL(PIDL);
end;
end;
Kann man die Delphi-eigene Memory-Leak-Funktion nicht für gewisse Units ausschalten, fürs restliche Projekt aber behalten?