gpt4 book ai didi

delphi - 为什么调用 IShellFolder._Release 时会出现错误?

转载 作者:行者123 更新时间:2023-12-01 16:34:57 25 4
gpt4 key购买 nike

我使用 Windows shell 枚举控制面板中的项目并在 memo 中添加项目名称,最终发布 IShellFolderPITEMIDLIST 但出现错误。

代码:

procedure TForm1.Button1Click(Sender: TObject);
var
psfDeskTop : IShellFolder;
psfControl : IShellFolder;
pidControl : PITEMIDLIST;
pidChild : PITEMIDLIST;
pidAbsolute : PItemIdList;
pEnumList : IEnumIDList;
celtFetched : ULONG;
FileInfo : SHFILEINFOW;

begin

OleCheck(SHGetDesktopFolder(psfDeskTop));
OleCheck(SHGetSpecialFolderLocation(0, CSIDL_CONTROLS, pidControl));
OleCheck(psfDeskTop.BindToObject(pidControl, nil, IID_IShellFolder,
psfControl));
OleCheck(psfControl.EnumObjects(0, SHCONTF_NONFOLDERS or SHCONTF_INCLUDEHIDDEN
or SHCONTF_FOLDERS, pEnumList));
while pEnumList.Next(1, pidChild, celtFetched) = 0 do
begin

pidAbsolute := ILCombine(pidControl, pidChild);
SHGetFileInfo(LPCTSTR(pidAbsolute), 0, FileInfo, SizeOf(FileInfo),
SHGFI_PIDL or SHGFI_DISPLAYNAME);
Memo1.Lines.Add(FileInfo.szDisplayName);

end;
//OK
psfDeskTop._Release;
//Error
psfControl._Release;
//Error
//pEnumList._Release;
CoTaskMemFree(pidControl);
CoTaskMemFree(pidChild);
CoTaskMemFree(pidAbsolute);
end;

为什么释放psfDeskTop没问题,但释放psfControl和pEnumList却出错?还有其他方法可以释放它们吗?或者在释放它们之前我需要一些判断吗?

最佳答案

接口(interface)对象由内部引用计数器释放,不需要释放它们(You Should not release them)。

关于delphi - 为什么调用 IShellFolder._Release 时会出现错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13382397/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com