使用SHBrowseForFolder() 出现0xC0000005非法访问错误:
CString BrowseFolder(HWND hWnd,char* Title,char* DisplayName)
{
acDocManager->lockDocument(curDoc(),AcAp::kWrite,NULL,NULL,true);
TCHAR szPath[MAX_PATH] = _T("");
BROWSEINFO bi;
bi.hwndOwner = hWnd;
bi.pidlRoot = NULL;
bi.lpszTitle = Title;
bi.pszDisplayName = DisplayName;
bi.ulFlags = BIF_RETURNONLYFSDIRS|BIF_USENEWUI;
bi.lpfn = NULL;
bi.lParam = 0;
LPITEMIDLIST pItemIDList=SHBrowseForFolder(&bi);
if( pItemIDList )
{
SHGetPathFromIDList(pItemIDList,szPath) ;
IMalloc *pMalloc;
if( SHGetMalloc( &pMalloc ) != NOERROR )
{
TRACE( "Failed to get pointer to shells task allocator" ) ;
return szPath;
}
pMalloc->Free( pItemIDList );
if( pMalloc )
pMalloc->Release();
}
return szPath;
acDocManager->unlockDocument(curDoc());
}
传给bi.pszDisplayName 的值必须为char*,不能为"",可以是NULL