- - PR -
属性を取得したい
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-08-15 21:11
冬寂さん、度々レスありがとうございます。
#以下、VC++の話になってしまい、恐縮です。 コンパイル時に、勝手に作成された「msxml4.tlh」というものを覗いてみました。 IXMLDOMNodePtr getNamedItem(_bstr_t name); と書いてあり、pAttrNodeが返って来るようです。 そこで、その戻って来た値を使い pAttrNode->get_nodeValue( &val ); として、nodeValue()を呼んでみました。 すると、上記実行時に「ハンドルされていない例外は、hoge.exe(MSXML3.DLL)にあります:0xC0000005:Access Violation。」となってしまいました。 ソースの先頭で、 #import "msxml4.dll" と記述しているのに、なぜMSXML3.DLLとなってしまったのでしょう? これについて、どなたかご存知の方いらっしゃいますか? #XMLということに限らず、どのDLLが呼ばれるのかという一般的な質問という #ことで、VC系の掲示板に質問した方が賢明でしょうか? #悪気はないが、マルチポストだらけになるようで、ちょっと気がひける。 | ||||||||||||||||
|
投稿日時: 2005-08-15 21:27
明らかにコード云々じゃなくて環境作りに失敗してるんだから
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xmlsdk/html/6b545726-8637-481a-934c-874617c2004c.asp の http://msdn.microsoft.com/library/en-us/xmlsdk/html/def1c84a-6f8a-4b4d-b919-d1a703118214.asp と http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xmlsdk/html/02b48be9-c278-4125-8fb5-f5d975173543.asp と http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xmlsdk/html/5d43fb06-f723-451d-b00d-6727dfe862aa.asp ヨメ 上のアドレス失敗なきがする To install MSXML manually Copy the DLLs to the system directory on your working machine. Register the DLLs by typing the following at a command prompt: cd c:\windows\system32 regsvr32 msxml4.dll で To include headers and libraries automatically Add the following two lines to your source code: #import <msxml4.dll> raw_interfaces_only using namespace MSXML2; もし手動でインクルードするなら Include the required MSXML header file by inserting the following macro into the source code: #include <msxml2.h> Link msxml2.lib to your project. To do this in Visual C++, open Project Settings by clicking Settings from the Project menu. Select the Link tab. Append "msxml2.lib" to the Object/library modules: textbox. [ メッセージ編集済み 編集者: 未記入 編集日時 2005-08-15 21:35 ] | ||||||||||||||||
|
投稿日時: 2005-08-15 21:30
未記入さん、レスありがとうございます。
msxml2.hが入っていないので、コンパイルが通りませんでした。 どこのサイトだったか忘れましたが、最初に参考にした(属性の読込をしていない) ところでは、ヘッダをincludeしていませんでした。 #import "msxml4.dll"とインポートだけでした。 ヘッダが必要なのでしょうか? | ||||||||||||||||
|
投稿日時: 2005-08-16 21:19
未記入さん、レスありがとございます。
上記を参考に、現在試行錯誤中です。 regsvr32で、msxml4.dllを登録(successと表示された)後に、実行しても 「ハンドルされていない例外は、hoge.exe(MSXML3.DLL)にあります:0xC0000005:Access Violation。」となってしまいました。 またregsvr32 /uで、msxml3.dllを解放(successと表示された)後に、実行しても同様でした。 #なぜか、msxml4.dllは呼ばれないようです。 またMSXML4.0(SP2)を http://www.microsoft.com/downloads/details.aspx?FamilyID=3144b72b-b4f2-46da-b4b6-c5d7485f2b42&DisplayLang=ja よりDLし、手動でインクルードする方法で、先日教えていただいたサンプルコードをコンパイルしてみたところ、コンパイルエラーは発生しませんでした。 で気を良くして、この方法に乗り換えて実際にエレメント・属性の取得をしてみようとしたのですが、 using namespace MSXML2; の部分で、「error C2871: 'MSXML2' : 存在しないか名前空間ではありません。」となってしまい、以下それに伴うと思われるエラーが多数出る状況になってしまいました。 あちこサイトを検索してみたところ、namespaceは「msxml.dllはMSXML」「msxml2.dll〜msxml4.dllは、MSXML2」と書いてあったのですが何がまずいんでしょう? #XMLはもちろんのことnamespaceについても、よくわからない状態なので #何をどうしてよいものやら・・・ どうも状況が混乱してきて、自分でも整理つかない状態ですが、とりあえずご報告まで。 | ||||||||||||||||
|
投稿日時: 2005-08-17 02:38
こんにちは。
自分はJavaScriptを知っている程度のレベルですので、間違った発言が あるかもしれないので、予めご了承ください。 ぽち さんが作成されているのはクライアント向けのアプリケーション ですか? (Windows2000の場合ですが、Internet Explorer 6 のインストールで MSXML3 がインストールされ、MSXML4 は別にダウンロード、インストール する必要がある。ということはご理解されてますか?) また、regsvr32 msxml4.dll することはDLLファイルをレジストリに 登録することであって、「インクルード」する作業ではないことは ご理解されてますか? 未記入 さん提示の4つのMSDNへのリンクはすべて読んでますか? ■ To include headers and libraries automatically http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xmlsdk/html/def1c84a-6f8a-4b4d-b919-d1a703118214.asp regsvr32 msxml3.dll の場合 ============================================== #import <msxml3.dll> raw_interfaces_only using namespace MSXML2; ============================================== regsvr32 msxml4.dll の場合、 ============================================== #import <msxml4.dll> raw_interfaces_only using namespace MSXML2; ============================================== 正しく記述してますか? ■ To include headers and libraries manually http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xmlsdk/html/5d43fb06-f723-451d-b00d-6727dfe862aa.asp 1から5を正確に実行してみましたか? 環境が整ったと仮定して... そもそも「属性を取得したい」→「属性の値を取得したい」とのことでしたね。 下記リンクのページに記載されている getNamedItemメソッド のサンプルコードは 参考にされてますか? http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xmlsdk/html/f558c38c-1d57-4915-9ea3-55f986436847.asp | ||||||||||||||||
|
投稿日時: 2005-08-19 12:46
gomaさん、レスありがとうございます。
スタンドアロンで動作するアプリケーションです。 現在試行錯誤して開発中なので、今後ファイル構造がガンガン変わる可能性があるため、xmlのようにデータにタグがあればデータの書込みの順番その他が変わっても容易に対応できるかな・・・と思いまして。
そう言われてみればそうでした。 先日、あるソフトを動かす時にMSXML4を別にダウンロードしたっけ。 ということで、MSXML3を使うように変更しました。
これなら、解ってます。(^^ゞ #DLLなんて、便利なようで不便なようで。 #あ〜、DOSは良かったなぁ。(いまだにそんな事言ってるのか!)
読みました。が、英語なので私の解釈が正しいか・・・ で、またまたあれこれやってみました。 msxml3.dllを利用する方法で、属性を取得することができました。 以下、主要部分の一部(ごめんなさい、色々試したらソースがきたな過ぎて全部載せられません)を掲載します。 ------------------ #import "msxml3.dll" using namespace MSXML2; IXMLDOMNamedNodeMap* map; IXMLDOMAttributePtr pAttributeX = map->getNamedItem(_bstr_t(L"x")); buf = pAttributeX->Gettext(); ------------------ 前回の投稿時、getNamedItem()の戻り値をIXMLDOMNode*型の変数で受けていたのがマズかったみたいです。 とりあえず、お試しソフトでの読書きはできたので、これから本チャンアプリをXML形式に対応させてみたいと思います。 #他の部分とのからみで、不都合が発生しませんように・・・ みなさん、アドバイスありがとうございました。 | ||||||||||||||||
|
投稿日時: 2005-08-21 05:04
msxmlでのFAQになりそうなネタなので書いておきます
まずぽちさんが最初になぜコンパイルエラーになったかというとおそらく #import <msxml4.dll> raw_interfaces_only ではなく #import <msxml4.dll> というディレクティブだったからだと思います これによってgetNamedItemのプロトタイプは HRESULT __stdcall getNamedItem ( BSTR name, struct IXMLDOMNode * * namedItem ) ではなく IXMLDOMNodePtr getNamedItem ( _bstr_t name ); になっています(理由も知らないしドキュメントに記載は無い) コメントに // // Wrapper methods for error-handling // と MSDNに raw_interfaces_only 属性は、エラー処理ラップ関数とその関数を使う __declspec(property) 宣言の生成を抑制します。 raw_interfaces_only 属性を指定すると、非プロパティ関数の名前付けに使われるデフォルトのプレフィックスも削除されます。デフォルトのプレフィックスは raw_ です。この属性を指定すると、タイプ ライブラリの関数名が直接使われます。 この属性を指定すると、タイプ ライブラリの低水準の内容だけを公開できます。 と書いてあるのでそういうことなのでしょう | ||||||||||||||||
|
投稿日時: 2005-08-25 11:43
未記入さん、レスありがとうございます。
なるほど。
これ、実は読みました。 が・・・、なんとな〜く解る(いやほとんど解っていない)状態だったので raw_interfaces_onlyを付けたり、コメントにしたりして試してました。 で、付けるとコンパイルエラーがいっぱい出たので「こりゃ不要だろう」と 予想して(?)、付けずにやってました。 ということで、実はコレ未だに内容をはっきり理解できていないんです。 |