例外

2011-01-20 12 views
0

I持っていた私のプログラムでC++のコードの次の行例外

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

は、あなたはそれがOKインスタンス化していない場合は、なぜされていないことを確認するためのCFileDialogのインスタンス化した後

DWORD WINAPI CommDlgExtendedError(void);

を呼び出す必要があります。

編集:

あなたはダイアログがときにDoModal()を返すことがある閉じた後GetFolderPathを呼び出すことができません。このMSDN pageを見て、ファイル名を保持するバッファを渡す方法についての発言を参照してください。

+0

試しました!関数は0を返し、すべてがOKであることを示します。 : – anhldbk

+0

@anhldbk - 私は自分の答えを編集しました。hWndが閉じられているのでダイアログが閉じられた後にGetFolderPathを呼び出すことができませんので、エラーが発生します。 – T33C

+0

あなたのアドバイスありがとうございます。 Windows 7上でスムーズに動作します。そのことは私を大いに悩ませています。 – anhldbk

2

Window7マシンでのビルドとXPへのデプロイの楽しさ。

あなたはMFCコードをトレースした場合:

::バージョンの取得は、()と呼ばれ、Windowsのビザのための上記の異なるコードのすべての種類を実行しています。即ち、それは異なって振舞う。

これは、WIN7のDoModalの後にGetPathName、GetFileName、またはGetFolderPathを呼び出すと、期待どおり(Javaのように)動作することを意味します。 Windows XPの場合は間違っていて、ソフトウェアがクラッシュします。

0

XPではGetFolderPathを使用できませんでしたが、GetPathNameはOKでした。