none
ファイル読み込み時に例外が発生してしまいます RRS feed

  • 質問

  • 現在、MSXMLを利用してXMLファイルの読み込みを行う機能を作成しています。
    インスタンスの作成まではできたのですが、肝心のXMLファイルをloadすると、Exceptionが発生してしまいました。
    正常にloadし要素を取得するには、どのように解決すれば良いでしょうか。
    ------------------------------------------------------------
    #include <objbase.h>
    #include <atlbase.h>
    #include <comutil.h>
    #include <comdef.h>
    #include "StdAfx.h"
    #include "msxml2.h"
    #import "msxml3.dll" named_guids raw_interfaces_only
    int WINAPI WinMain(HINSTANCE n_hInstance, HINSTANCE n_hPrevInstance, LPTSTR npCmdLine, int nCmdShow)
    {
    short sResult = FALSE;
    HRESULT hr;
    VARIANT_BOOL hr2;
    hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);
    IXMLDOMDocument2 *pXmlDoc = NULL;
    hr = CoCreateInstance(CLSID_DOMDocument,NULL,CLSCTX_INPROC_SERVER,IID_IXMLDOMDocument2,(void**)&pXmlDoc);
    hr = pXmlDoc->put_async(VARIANT_FALSE);
    hr2 = pXmlDoc->load(_variant_t(L"\\Temp\\Sample.xml"), &sResult); // <-ここでException
    // 以下要素取得等…
    }
    -------------------------------------------------------
    Exception ffffffe0 Thread=8ec0dd08 Proc=6ecb297a 'XML_Parser.exe'
    AKY=00001001 PC=03a6c56a(msxml3.dll+0x0001c56a) RA=8830e156(NK.EXE+0x0000e156) TEA=03a6cf16
    TLSKERN_NOFAULT set... bypassing kernel debugger.
    First-chance exception in XML_Parser.exe: 0xE0000001: (no name).

    環境は、eMbedded Visual C++です。
    また、中身を空でsave()を実行すると指定場所にが作成されますが、何かしら要素を入れてsave()を行うと、同様に例外が
    発生してしまいました。
    2009年11月16日 10:38

回答

すべての返信

  • 相対URL のカレントディレクトリの指定って( \ でも / でもいいけど)

    L"\\Temp\\Sample.xml"

    でなく

    L".\\Temp\\Sample.xml"



    L"Temp\\Sample.xml"

    でなかったですかね。


     /  から始めると相対位置でも
    ルート(例えば http://social.msdn.microsoft.com/ )からの相対位置ですよね。

    cf. RFC1808


    あと,関係ないと思うけど,
    デフォルトだと,デバッグ時のカレントディレクトリは
    Debugフォルダでなく,その上のプロジェクト名のフォルダです。

    # ここに写したときにパスを省略しただけなら
    # 原因は他でしょうが。


    稍丼 / yayadon
    2009年11月17日 2:16
  • yayadonさん

    返信ありがとうございます。

    load()にて指定するパスは絶対パスだったと思いますが、もしかして指定の仕方が間違っているのでしょうか?
    hr2 = pXmlDoc->load(_variant_t(L"\\Temp\\Sample.xml"), &sResult);

    L".\\Temp\\Sample.xml"
    L"Temp\\Sample.xml"

    共に、確認してみたのですが、同様にExceptionが出てしまいました。

    ちなみに、実行ファイルとファイルの位置関係は以下の通りです。

    XML_Parser.exe
    Temp
       |-Sample.xml

    XML_Parser.exeはrootにあります。

    #save()実行時にも保存場所を指定しますが、上記の指定方法でファイルは作成されていました。
    2009年11月17日 6:29
  • > 環境は、eMbedded Visual C++です。
    ということは対象はWindowsCEだと思います。であれば最低でもOSバージョンは明記すべきです。
    出来れば使用している端末も明記したほうがいいですが、守秘義務などがあるなら仕方ありません。
    またWindowsCEはベンダが自由に機能を選択できるのですが(MSXML 3.0を組み込まないことも可能)
    そういった部分に問題ないでしょうか?

    なおWindowsCEにはドライブレターやカレントフォルダの概念(というか機能自体)がないので
    ファイル名は\から始まるフルパスで書くことになります。
    このあたりはWindowsCEへの移植の際に引っかかりやすい部分です。

    あと提示されたコードではエラーチェックをしていないようですが大丈夫でしょうか?

    #ここではなくてWindowsCEフォーラムの方が質問先として適当かも?
    2009年11月17日 10:24
  • ホーミンさん

    返信ありがとうございます。

    おっしゃる通り、対象はWindowsCEとなっております。
    OSのバージョンですが、5.0となっています。

    >なおWindowsCEにはドライブレターやカレントフォルダの概念(というか機能自体)がないので
    >ファイル名は\から始まるフルパスで書くことになります。
    上記コードで指定しているパスは問題なしと捉えてよいのでしょうか?


    >あと提示されたコードではエラーチェックをしていないようですが大丈夫でしょうか?
    実際のコードには、エラーチェックを入れています。
    (イニシャライズ・インスタンス作成時等のチェックはいれてあります。)

    #WindowsCEフォーラムにも質問をいれてみたいと思います。

    2009年11月17日 23:50
  • #WindowsCEフォーラムにも質問をいれてみたいと思います。
    にも」だとすると、同時並行させるようなイメージを受けます。
    Windows CE フォーラムで質問されるのであれば、このスレッドの続きと明示して、このスレッドは新しいスレッドへのリンクを貼ってクローズするなど、同時並行させないようにしてください。

    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    2009年11月18日 13:42
    モデレータ
  • Azuleanさん


    ご指摘ありがとうございます。


    Windows CE フォーラムにて質問を記載しましたので、こちらのスレッドはクローズいたします。

    #Windows CE フォーラムでの質問リンク先
    http://social.msdn.microsoft.com/Forums/ja-JP/windowsceja/thread/a2f70735-3788-40a8-b771-0e429b63b1c0
    • 回答としてマーク ta2ya 2009年11月19日 5:41
    • 回答としてマークされていない ta2ya 2009年11月19日 5:41
    • 回答としてマーク ta2ya 2009年11月19日 5:42
    2009年11月19日 5:38