LPITEMIDLIST PidBrowse(HWND hwnd,int nCSIDL,LPSTR pszDisplayName)
{
LPITEMIDLIST pidRoot =NULL;
LPITEMIDLIST pidlSelected = NULL;
BROWSEINFO bi = {0};
LPMALLOC pMalloc = NULL ; SHGetMalloc(&pMalloc); if(nCSIDL){
SHGetFolderLocation(hwnd,nCSIDL,NULL,NULL,&pidlRoot);
}
els{
pidRoot = NULL;
} bi.hwndOwner = hwnd;
bi.pidRoot = pidlRoot;
bi.pszDisplayName = pszDisplayName;
bi.lpszTitle = "Choose a folder " ;
bi.lpfn = NULL ;
bi.lParam =0 ; pidlSelected = SHBrowseForFolder(&bi); if(pidlRoot){
pMalloc->Free(pidRoot);
}
pMalloc->Release();
return pidlSelected;
}没有调用pMalloc->Alloc()函数分配空间,为什么用pMalloc->Free()函数释放空间?
{
LPITEMIDLIST pidRoot =NULL;
LPITEMIDLIST pidlSelected = NULL;
BROWSEINFO bi = {0};
LPMALLOC pMalloc = NULL ; SHGetMalloc(&pMalloc); if(nCSIDL){
SHGetFolderLocation(hwnd,nCSIDL,NULL,NULL,&pidlRoot);
}
els{
pidRoot = NULL;
} bi.hwndOwner = hwnd;
bi.pidRoot = pidlRoot;
bi.pszDisplayName = pszDisplayName;
bi.lpszTitle = "Choose a folder " ;
bi.lpfn = NULL ;
bi.lParam =0 ; pidlSelected = SHBrowseForFolder(&bi); if(pidlRoot){
pMalloc->Free(pidRoot);
}
pMalloc->Release();
return pidlSelected;
}没有调用pMalloc->Alloc()函数分配空间,为什么用pMalloc->Free()函数释放空间?
解决方案 »
- 在C++中如何将十六进制转换为ASCII码
- 用ATL写IE的事件响应时 BEGIN_SINK_MAP中多个SINK_ENTRY_EX没有响应 高手帮忙看一下
- 怎么将内存位图插入到word
- 将Cstring类中的内容转16进制(急急急)
- 困惑?怎么通过已经连接到的客户IE的SOCKET象IE发送?
- 我在用CryptoAPI的时候,为什么会出现这样的错误呢?
- 请问除了用keybd_event()外,还有什么可以模仿键盘输入??
- 奇怪的锁屏问题
- 为什么我的vc6每次用f5都说一大堆文件没编译或不存在而我刚刚编译过
- 请教在vc6中怎样设断点调试COM元件?
- ATL中能不能用CFileDialog,我已经选了支持MFC
- 有关ADO实现存取Oracle数据库中的bitmap图像的问题
参考MSDN中SHBrowseForFolderThe calling application is responsible for freeing the returned PIDL with the Shell allocator's IMalloc::Free method.
但关于Shell方面的内存分配和释放还不是太清楚!