2011-01-20 43 views
0

我的C++代碼在我的程序以下行異常帶的CFileDialog(MFC)

CFileDialog dialog(true); 
CString strFileName=L""; 
INT_PTR nResult = dialog.DoModal(); 
if(nResult == IDOK) 
    // Exception spotted here 
    // Debug information gives me --> dialog = {CFileDialog hWnd=0x00000000} 
    // What's the heck? 
    strFileName=dialog.GetFolderPath(); 

的問題是:當我運行Windows XP的PC上執行的程序,也總是有一個醜陋的例外,這我不知道它爲什麼發生。但是,當我將它複製到另一臺運行Windows 7的PC時,一切都很好。

我很絕望。你能告訴我爲什麼嗎?

回答

3

你需要調用

DWORD WINAPI CommDlgExtendedError(void);

的CFileDialog的實例後,檢查它被實例化OK,如果不爲什麼。

編輯:

對話框被關閉後,它是時的DoModal()返回時,您不能打電話GetFolderPath。請看MSDN page關於如何傳遞緩衝區來保存文件名的說明。

+0

我試過了!該函數返回0,表示一切正常。 :( – anhldbk 2011-01-21 09:50:26

2

在Window7機器上構建並部署到XP的樂趣。

如果跟蹤通過MFC代碼:

:: GetVersion()被調用,並執行各種不同的代碼爲Windows簽證及以上。即它的行爲不同。

因此,這意味着,如果你在一個WIN7後的DoModal叫GetPathName,用GetFileName,或GetFolderPath它的工作原理爲您預期的效果(如Java)。對於Windows XP,您將不正確,並且軟件崩潰。

0

我無法在XP上使用GetFolderPath,但GetPathName沒問題。