关于IMalloc的疑惑!初学,谢谢了!

youki1234 2007-04-20 09:19:39
TCHAR szPath[MAX_PATH]={0};
BROWSEINFO m_bi;

m_bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_STATUSTEXT;
m_bi.hwndOwner = hWnd;
m_bi.pidlRoot = NULL;
m_bi.lpszTitle = lpTitle;
m_bi.lpfn = NULL;
m_bi.lParam = NULL;
m_bi.pszDisplayName = szPath;

LPITEMIDLIST pidl = ::SHBrowseForFolder( &m_bi );
if ( pidl )
{
if( !::SHGetPathFromIDList ( pidl, szPath ) ) szPath[0]=0;
//////////////////////////////////////////////////////////////////////
IMalloc * pMalloc = NULL;

if ( SUCCEEDED ( ::SHGetMalloc( &pMalloc ) ) ) // 取得IMalloc分配器接口
{
pMalloc->Free( pidl ); // 释放内存
pMalloc->Release(); // 释放接口
}
}
////////////////////////////////////////////////////////////////
上面代码中为什么要Free( pidl );
难道pidl隐式分配了内存?
为什么会这样?
还有什么地方需要这样操作?
谢谢了!
...全文
364 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Estfania 2007-04-21
  • 打赏
  • 举报
回复
COM里的内存管理
huzs_82 2007-04-21
  • 打赏
  • 举报
回复
一楼是正解.
SHBrowseForFolder这个函数功能很强大,可以自定义实现很多功能.
因此里面也有内部自己分配的内存需要在完成时进行手动的内存释放.
CathySun118 2007-04-21
  • 打赏
  • 举报
回复
看看这篇文章就明白了:
http://www.vckbase.com/document/viewdoc/?id=1493
masterz 2007-04-20
  • 打赏
  • 举报
回复
看看MSDN上关于SHBrowseForFolder的说明
。。。
The calling application is responsible for freeing the returned PIDL by using the Shell allocator's IMalloc::Free method. To retrieve a handle to that IMalloc interface, call SHGetMalloc.

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧