关于MSDN上的一个例子,和SHBrowseForFolder有关的问题.

cppseekey 2006-04-29 10:21:28
void CConfigDlg::OnBnClickedBrowse(void)
{
HRESULT hr;
LPITEMIDLIST pItemList;
BROWSEINFO browseinfo;
TCHAR path[MAX_PATH];
hr = ::CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
if (FAILED(hr)) {
TRACE("CoInitEx failed: %x\n", hr);
return;
}

//*#############
IMalloc *pMalloc = NULL;
hr = SHGetMalloc(&pMalloc);
if (FAILED(hr)) {
TRACE("Can't retrieve system's IMalloc interface: %x\n", hr);
return;
}
ENSURE(pMalloc);
*///#############

memset(&browseinfo, 0, sizeof(BROWSEINFO));
CString strCaption;
browseinfo.hwndOwner = GetSafeHwnd();
browseinfo.pszDisplayName = path;
browseinfo.ulFlags = BIF_NEWDIALOGSTYLE | BIF_RETURNONLYFSDIRS;
strCaption.LoadString(IDS_CONFIG_CAPTION);
browseinfo.lpszTitle = strCaption;

pItemList = ::SHBrowseForFolder(&browseinfo);
if (pItemList) {
// Behold the elegance of CStrBuf!
::SHGetPathFromIDList(pItemList, CStrBuf(m_strPath, MAX_PATH));
//##### pMalloc->Free(pItemList);
UpdateData(FALSE);
}
//#### pMalloc->Release();
//#### pMalloc = NULL;
::CoUninitialize();
}

该函数用来打开一个选择文件夹的对话框,我想问的是上面的代码中被我用//######注释掉的那些代码主要作用是什么?因为将这几行代码注释掉,程序仍然可以正常运行,并且没看出什么明显的异常.我想知道的是如果没有这几行代码会有什么隐患呢?
该例子见MSDN2005 : DllScreenCap
...全文
196 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
tomtom123 2006-04-30
  • 打赏
  • 举报
回复
MARK
zh2817 2006-04-30
  • 打赏
  • 举报
回复
顶一楼一下!
goodboyws 2006-04-29
  • 打赏
  • 举报
回复
pMalloc可以看作一个Com的内存分配器,这里的主要作用是
释放pItemList,否则会内存泄露

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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