- ベストアンサー
VC++2003でSDIのMFCアプリ作成中です。
アイコン上にファイルをドロップし、ファイルをオープンする動作を実装し、 正常系は動作確認できました。 しかし、ファイルに読み込み制限などをかけていた場合、こちらのエラー処理に入る前に Windows内部エラー処理に入ってしまうようで、「○○へのアクセスは拒否されました」と ダイアログが表示されます。 デバッグで見て云ったところ、ProcessShellCommand(cmdInfo)の内部でエラーが発生し、 強制的におちているようですが、具体的にどこのクラス、メソッドでエラーを受け取って いるのでしょうか? オーバーライドしてエラー処理を自分で実装したいと考えています。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
ドキュメントクラスのOnOpenDocumentの中で実行する GetFileがNULLを返した場合にそのMesseageBoxを表示しているようです アプリ側のドキュメントクラスに OnOpenDocumentを作成しておいて BOOL CXXXDocument::OnOpenDocument( LPCTSTR lpszPathName ) { CFileException fe; CFile* pFile = NULL; pFile = GetFile( lpszPathName, CFile::modeRead, &fe ); if ( pFile ) { // 正常に開けたので CDocumentで開けるようにココでは閉じる pFile->Close(); } else { // ここでエラー処理をする return FALSE; } return CDocument::OnOpenDocument(lpszPathName ); } といった具合でいいように思います
その他の回答 (2)
- m-take0220
- ベストアンサー率60% (477/782)
> CXXXDocumentというのはCDocumentを継承して新たにクラスを宣言するのでしょうか? 例えば、Testというプロジェクトを作成すると、CTestDocというCDocumentクラスから派生したクラスが自動で作成されますよね。それのことです。
- m-take0220
- ベストアンサー率60% (477/782)
virtual void CDocument::ReportSaveLoadException をオーバーライドする方法もあります。 OnOpenDocumentでエラーになった場合は、この関数が呼び出されます。 CDocument::ReportSaveLoadException http://msdn.microsoft.com/ja-jp/library/sw5196eb(v=VS.71).aspx
補足
CXXXDocumentというのはCDocumentを継承して新たにクラスを宣言するのでしょうか?