Исключение с CFileDialog (MFC) - PullRequest
       0

Исключение с CFileDialog (MFC)

0 голосов
/ 20 января 2011

В моей программе были следующие строки кода 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, всегда возникает ужасное исключение, которое я не знаю, почему это произошло. Но все хорошо, когда я скопировал его на другой компьютер под управлением Windows 7.

Я в отчаянии. Парень, скажите, пожалуйста, почему?

Ответы [ 3 ]

3 голосов
/ 20 января 2011

Вам нужно вызвать

DWORD WINAPI CommDlgExtendedError (void);

после создания экземпляра CFileDialog, чтобы проверить, что он создан, а если нет, то почему.

Редактировать:

Вы не можете вызвать GetFolderPath после закрытия диалога, как это происходит, когда DoModal () возвращается.Посмотрите на эту страницу MSDN под примечаниями о том, как передать буфер для хранения имен файлов.

2 голосов
/ 22 ноября 2012

Забавно строить на машине с Window7 и развертывать на XP.

Если вы выполняете трассировку с помощью кода MFC:

:: GetVersion () вызывается и выполняет все виды различныхкод для Windows Visa и выше.т.е. он ведет себя по-разному.

Таким образом, это означает, что если вы вызвали GetPathName, GetFileName или GetFolderPath после DoModal в WIN7, он будет работать так, как вы ожидали (например, Java).Для Windows XP вы были бы неправильно, и программное обеспечение вылетает.

0 голосов
/ 10 марта 2015

Я не мог использовать GetFolderPath в XP, но GetPathName был в порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...