プロが教えるわが家の防犯対策術!

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

目的は、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();
}

A 回答 (1件)

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



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

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

catch(...)

で、全例外を補足してみると、何か進展があるかもしれませんが。
    • good
    • 0
この回答へのお礼

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

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


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

お礼日時:2005/09/05 18:17

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!