2011-01-25 47 views
1

MSXML2を使用して継承したVC++プロジェクトをコンパイルしようとしています。これはATL .EXEプロジェクトです。"MSXML2"にVC++ 2010でメンバー "IXMLDOMNode"の問題がありません

#include "msxml2.h" 

using namespace MSXML2; 

プリプロセッサ定義はそれなしMSXML2名前空間が未定義だったので、私はプロジェクトに追加__USE_MSXML2_NAMESPACE__を含む:ヘッダファイルは、以下を含みます。

エラーC2039:「IXMLDOMNode」:私は、フォームの多くのエラーを受け取り、このプロジェクトをビルドしようとすると、「MSXML2」

これらのエラーは、次の

のように宣言することによって製造されるのメンバーではありません
CComPtr<MSXML2::IXMLDOMNode> pNode; 

IXMLDOMDocumentやIXMLDOMNodeなど、他のメンバーが見つかりません。

+1

msxml2.hを含め、__USE_MSXML2_NAMESPACE__を削除し、名前空間MSXML2を使用し、CComPtr pNode;を使用できますか?それはうまくいくはずです。 –

+0

ありがとう!本当にうまくいきました、何が間違っていたか簡単に説明できますか? – Nack

答えて

2

あなたはこの

  1. msxml2.hヘッダをインクルードし修正することができます。
  2. USE_MSXML2_NAMESPACEusing namespace MSXML2コードを削除します。
  3. CComPtr<IXMLDOMNode> pNode;名前空間なし。

多くのプロジェクトでは、importキーワードを使用してVisual C++にMSXML2名前空間を使用してTBLからヘッダーファイルを生成するように求めています。ただし、ヘッダーとlibへのリンクを使用することは、C++標準ではないので、importキーワードの使用を避けるための私の好きな方法です。結論は、古いプロジェクトをリフレッシュするときに2つのアプローチを混ぜることを避けることです。これは、このような問題につながります。

+0

問題が修正され、プロジェクトのコンパイルが完了しました!私は、 'using'ステートメントと 'MSXML2 ::'ステートメントの両方を削除するのは私にとっては直感に反しているようだが、期限が迫っていると私は不平を言っていない。 – Nack

関連する問題