关于MSDN上的一个例子,和SHBrowseForFolder有关的问题.
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