none
VS2010 C++MFCで Word文書を作成していますがある環境だけで落ちるようになりました RRS feed

  • 質問

  • VS2010 C++MFCで Word文書を作成するプログラムを開発しています。

    サンプルのような感じで、Wordファイルを作成しています。

    ユーザーの一部のPCだけなんですが、なんらかの原因で "ここで落ちる" 箇所で落ちるようになりました。
    例外を取っても Unkown+アドレス だけで内容は判りませんでした。

    なんらかの原因で テンプレート.dotx にロックがかかっている 可能性も考えています。
    このソースで テンプレート.dotx にロックがかかる事はありますでしょうか ?

    またなにかマズイ箇所がありましたらご指摘ください。

    よろしくお願いいたします。

    ※自分がテストできる全PCでは起きていなくて、PCに疎いユーザー所だけで発生している為
     細かい情報は得られていません。

    Word::_ApplicationPtr  wordApp;
    CComPtr<Word::_Document> wordDoc;
    CComPtr<Documents> docs;
    
    
    CoInitialize(NULL);
    wordApp.CreateInstance(L"Word.Application");
    wordApp->get_Documents(&docs);
    COleVariant objVariant( "テンプレート.dotx" );
    VARIANT variant = objVariant.Detach();
    // Create Document and attach.
    wordDoc = docs->Add(&variant);	// ここで落ちる
    
    
    spPara = document->Paragraphs;
    pPara = spPara->Add();
    
    いろいろ文字を書き出す
    
    
    COleVariant objVariant( "サンプル.docx" );
    VARIANT variant = objVariant.Detach();
    wordDoc->SaveAs(&variant);	
    wordDoc->Close();
    CoUninitialize();

    2017年1月31日 9:06

回答

  • 開発環境と問題が発生している環境の Word のバージョンは何になりますでしょうか?

    dotx のパスが見つからない場合も、例外で Unkown+アドレス となることがあるようです。パスは間違いないでしょうか?

    気になったところですが、wordApp が閉じられていないようです。

    CoUninitialize();

    の前で

    wordApp->Quit();

    を実行し、Word 本体を閉じたほうがよいと思います。裏で WINWORD.EXE が立ち上がったままとなってしまいます。

    • 編集済み kenjinoteMVP 2017年1月31日 12:02
    • 回答としてマーク AppKey 2017年1月31日 12:31
    2017年1月31日 11:37

すべての返信

  • 開発環境と問題が発生している環境の Word のバージョンは何になりますでしょうか?

    dotx のパスが見つからない場合も、例外で Unkown+アドレス となることがあるようです。パスは間違いないでしょうか?

    気になったところですが、wordApp が閉じられていないようです。

    CoUninitialize();

    の前で

    wordApp->Quit();

    を実行し、Word 本体を閉じたほうがよいと思います。裏で WINWORD.EXE が立ち上がったままとなってしまいます。

    • 編集済み kenjinoteMVP 2017年1月31日 12:02
    • 回答としてマーク AppKey 2017年1月31日 12:31
    2017年1月31日 11:37
  • 開発環境と問題が発生している環境の Word のバージョンは何になりますでしょうか?

    dotx のパスが見つからない場合も、例外で Unkown+アドレス となることがあるようです。パスは間違いないでしょうか?

    気になったところですが、wordApp が閉じられていないようです。

    CoUninitialize();

    の前で

    wordApp->Quit();

    を実行し、Word 本体を閉じたほうがよいと思います。裏で WINWORD.EXE が立ち上がったままとなってしまいます。

    ありがとうございます。

    これスレッドは上げない積りでしたが、何かの表示に公開されてました。

    落ちる原因はプログラムではなくて、どうも出来たexeを圧縮してクライアントに送るときに Zipにウイルスが入っているような感じでした。 (なぜかWord出力だけ動きがおかしくなります)

    ウイルス以外にも問題がありそうならまた上げなおすかもしれませんのでその時はよろしくお願いします。

    ちなみにWordは2010で、dotxファイルはexeのフォルダを指定していて落ちないPCが大半ですのでdotxがない事は無いと考えております。

    2017年1月31日 12:31
  • VisualStudio2010 C++MFCのWordファイル書き出しでOffceのバージョン違いで落ちるのを回避したいで指摘済みなんですが…というか指摘のほぼ全てが修正されないままですので、不安定な動作をして当たり前です。

    MFC+ADOでmdbファイルを作るとロックされる、または最終レコードが作成されないでも適切にReleaseしていない(適切にReleaseされるようにコーディングされていない)ように見受けられます。

    とりあえず動く(=動く環境もあるが動かない環境があっても構わない)を目指すのであればそれはそれで個人の自由ですが、「ある環境だけで落ちるようになりました 」と質問する前にまずは不適切なコードを修正してください。

    • 回答の候補に設定 qt6 2017年2月1日 1:54
    2017年1月31日 13:00