こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

パスワード付きWordファイルのオープン失敗時の例外処理

少し前にも同様の質問を投稿したのですが、内容が曖昧だったと感じたので、改めて質問させていただきます。

目的は、Microsoft Wordで作成した文章ファイルにパスワードがかかっているか否かを判定することです。

現時点では、ファイルオープン時にパスワード入力を失敗させた Runtime Error を catch することで対処しようとしているのですが、このエラーの掴み方が分かりません。
エラーメッセージには abnomal program termination と出ています。

このエラーを掴む方法をどなたかご存知ないでしょうか。
よろしくお願いします。

↓ソースは以下の通りです↓

#import "C:\Program Files\Microsoft Office\Office\Mso9.dll" no_namespace rename("DocumentProperties", "DocumentPropertiesDOC")
#import "C:\Program Files\Common Files\Microsoft Shared\VBA\VBA6\Vbe6ext.olb" no_namespace
#import "C:\Program Files\Microsoft Office\Office\Msword9.olb" rename("ExitWindows", "ExitWindowsDOC")

try {
using namespace Word;
_ApplicationPtr pAPP;

COleVariant vOpt((long)DISP_E_PARAMNOTFOUND, VT_ERROR);

//Wordの起動
pAPP.CreateInstance(L"Word.Application");
pAPP->Visible = TRUE;

//新規ドキュメントを作成
DocumentsPtr pDocuments = pAPP->GetDocuments();

//任意のパスワード付きファイルをオープン。
//5要素目は正しくないパスワード。
_DocumentPtr pDocument =
pDocuments->Open(COleVariant("C:\\test.doc"),vOpt,vOpt,vOpt,
COleVariant("password"),vOpt,vOpt,vOpt,vOpt,vOpt, vOpt, vOpt);

//Wordを閉じる
pAPP->Quit();
}

catch(CException *e) {
AfxMessageBox("キャッチ");
e->Delete();
}

投稿日時 - 2005-09-05 11:43:23

QNo.1627983

暇なときに回答ください

質問者が選んだベストアンサー

この方面にはくらいので外している可能性は多いですが……。

CExeption は、MFC が送出する例外らしいので、これとは別のクラスの例外が送出されているのではないでしょうか?

もしも、例外が送出されるのであれば、

catch(...)

で、全例外を補足してみると、何か進展があるかもしれませんが。

投稿日時 - 2005-09-05 14:39:46

お礼

すべての例外を掴むのには catch(...) を使えばよかったのですね、恥ずかしながら初見でした。
CExeptionですべて掴めると勘違いしていました。

ソースの方ですが、catch(...)を使うことで無事に例外を補足できているようです。
これでとりあえずは目的の処理を行うことができそうです。
非常に助かりました、ありがとうございます。


ただ、相変わらず何という例外が出ているのかは不明のままです。
こちらの方でも調べていますが、解決するまでしばらくの間は未解決とさせてもらいます。

投稿日時 - 2005-09-05 18:17:40

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問