2013-09-27 3 views
1

У меня есть приложение для Windows, разработанное в VC++. Я использую CFileDialog для отображения диалогового окна. Однако в тот момент, когда я щелкнул правой кнопкой мыши по диалоговому окну, он сработает. Тот же код отлично работает в XP. Я прочитал некоторые, где Vista Style больше не поддерживается. Поэтому я изменил код следующим образом. Тем не менее я получаю аварииДиалоговая ошибка в Win7

CFileDialog dlg(FALSE, _T("*.xml"),strFileName ,OFN_HIDEREADONLY, 
         _T("(*.xml)|*.xml|(*.*)|*.*||"), NULL, 0,FALSE); 

if (IDOK == dlg.DoModal()) //crash here on right click 
{ 
     //CString folder = dlg.GetFolderPath(); 
     strFileName = dlg.GetPathName(); 
     SetFileName (T2CW (strFileName)); 

} 

Ниже приведен трассировки стека

OLE32! CServerContextActivator :: CreateInstance + 245 ole32! ActivationPropertiesIn :: DelegateCreateInstance + 5e ole32! CApartmentActivator :: CreateInstance + 88 ole32! CProcessActivator :: CCICallback + 4e ole32! CProcessActivator :: AttemptActivation + 33 ole32! CProcessActivator :: ActivateByContext + 7е ole32! CProcessActivator :: CreateInstance + 77 ole32! ActivationPropertiesIn :: DelegateCreateInstance + 5e ole32! CClientContextActivator :: CreateInstance + ЕВ ole32! ActivationPropertiesIn :: DelegateCreateInstance + 5e ole32! ICoCreateInstanceEx + 5f5 ole32! CoCreateInstance + 17b shell32! _SHCoCreateInstance + 209 shell32! SHExtCoCreateInstance + 28 shell32! DCA_SHExtCoCreateInstance + 3d shell32 ! HDXA_QueryContextMenu + 287 shell32! CDefFolderMenu :: QueryContextMenu + 625 shell32! CContextMenuOnContextMenuArray :: _ QueryNthContextMenu Shell32! CContextMenuOnContextMenuArray :: QueryContextMenu + b0 shell32! CDefView :: _ DoContextMenuPopup + 19дн shell32! CDefView :: OnBackgroundContextMenu + 2D1 Shell32 ! CListViewHost :: ShowContextMenu + 1F1 shell32! CDefView :: _ OnContextMenu + 110 shell32! CDefView :: WndProc + 889 shell32! CDefView :: s_WndProc + 7с user32! UserCallWinProcCheckWow + 1AD user32! CallWindowProcAorW + DC user32! CallWindowProcW +18 comctl32_7fefbdd0000! CallOriginalWndProc + 1д comctl32_7fefbdd0000! CallNextSubclassProc + 8в comctl32_7fefbdd0000! DefSubclassProc + 7с shell32! DefSubclassProc + 56 shell32! CListViewHost :: _ ViewSubclassWndProc + 3E1 shell32! CListViewHost :: s_ViewSubclassWndProc + 4f comctl32_7fefbdd0000! CallNextSubclassProc + 8в comctl32_7fefbdd0000! MasterSubc lassProc + e7 user32! UserCallWinProcCheckWow + 1AD user32! DispatchClientMessage + c3 user32! _fnDWORD + 2d Ntdll! KiUserCallbackDispatcherContinue user32! ZwUserMessageCall + а user32! RealDefWindowProcWorker + a user32! RealDefWindowProcW + 5a UxTheme! DoMsgDefault + 2a UxTheme! OnDwpContextMenu + эф UxTheme! _ThemeDefWindowProc + 209 UxTheme! ThemeDefWindowProcW + 11 user32! DefWindowProcW + e6 comctl32_7fefbdd0000! CListView :: WndProc + 2А42 comctl32_7fefbdd0000! CListView :: s_WndProc + 6cd user32! UserCallWinProcCheckWow + 1AD user32! CallWindowProcAorW + DC user32! CallWindowProcW + 18 comctl32_7fefbdd0000! CallOriginalWndProc + 1d comctl32_7fefbdd0000! CallNextSubclassProc + 8c comctl32_7fefbdd0000! DefSubclassProc + 7с shell32! DefSubclassProc + 56 shell32! CListViewHost :: s_ListViewSubclassWndProc + 31e comctl32_7fefbdd0000! CallNextSubclassProc + 8c comctl32_7fefbdd0000!MasterSubclassProc + e7 user32! UserCallWinProcCheckWow + 1AD user32! SendMessageWorker + 682 user32! SendMessageW + 5в comctl32_7fefbdd0000! CLVMouseManager :: HandleMouse + 8с comctl32_7fefbdd0000! CListView :: WndProc + 9dc comctl32_7fefbdd0000! CListView :: s_WndProc + 6cd user32 ! UserCallWinProcCheckWow + 1AD user32! CallWindowProcAorW + DC user32! CallWindowProcW + 18 comctl32_7fefbdd0000! CallOriginalWndProc + 1d comctl32_7fefbdd0000! CallNextSubclassProc + 8c comctl32_7fefbdd0000! DefSubclassProc + 7с shell32! DefSubclassProc + 56 shell32! CListViewHost :: s_ListViewSubclassWndProc + 31e comctl32_7fefbdd0000! CallNextSubclassProc + 8в comctl32_7fefbdd0000! MasterSubclassProc + e7 user32! UserCallWinProcCheckWow + 1AD user32! DispatchMessageWorker + 3B5 user32! IsDialogMessageW + 153 user32! DialogBox2 + 197 user32! InternalDialogBox + 135 user32! DialogBoxIndirectParamAorW + 58 user32 ! DialogBoxIndirectParamW + 18 comdlg32! CFileOpenSave :: Показать + 1AF comdlg32! _InvokeNewFileOpenSave + дб comdlg32! CSTADialog :: s_DialogThreadProc + 2d shlwapi! WrapperThreadProc + 19b kernel32! BaseThreadInitThunk + d Ntdll! RtlUserThreadStart + 1д

+0

Вы имеете в виду щелчок правой кнопкой мыши на файле, указанном в списке файлов, или просто случайном щелчке правой кнопкой мыши в пользовательском интерфейсе диалога? –

+0

Когда я нажимаю правой кнопкой мыши, чтобы создать новую папку –

+0

Этот код отлично работает в моей среде. Возможно, у вас есть Explorer Explorer, который вызывает Crash. Посмотрите на стек вызовов в отладчике. Кто вызывает крах? – xMRi

ответ

0

Проблема решена, если я отключу расширение контекстного меню NVLIA CPL из контекстного меню. Однако его по-прежнему остается загадкой, поскольку один и тот же код работает для других приложений.

Смежные вопросы