【问题标题】:"MSXML2" has no member "IXMLDOMNode" problem in VC++ 2010“MSXML2”在 VC++ 2010 中没有成员“IXMLDOMNode”问题
【发布时间】:2011-01-25 02:50:57
【问题描述】:

我正在尝试编译我继承的使用 MSXML2 的 VC++ 项目。这是一个 ATL .EXE 项目。头文件包括以下内容:

#include "msxml2.h"

using namespace MSXML2;

预处理器定义包括 __USE_MSXML2_NAMESPACE__,我将其添加到项目中,因为没有它,MSXML2 命名空间是未定义的。尝试构建此项目时,我收到许多表单错误:

错误 C2039:“IXMLDOMNode”:不是“MSXML2”的成员

这些错误是由如下声明产生的

CComPtr<MSXML2::IXMLDOMNode> pNode;

未找到其他成员,包括 IXMLDOMDocument 和 IXMLDOMNode。

【问题讨论】:

  • 能否包含 msxml2.h,删除 USE_MSXML2_NAMESPACE 并使用命名空间 MSXML2,并使用 CComPtr pNode;?那应该可以。
  • 谢谢!这确实有效,你能简单解释一下出了什么问题吗?

标签: visual-c++ atl msxml


【解决方案1】:

你可以解决这个问题

  1. 包括msxml2.h 标头。
  2. 删除USE_MSXML2_NAMESPACEusing namespace MSXML2 代码。
  3. 使用不带命名空间的CComPtr&lt;IXMLDOMNode&gt; pNode;

我见过很多项目使用 import 关键字来要求 Visual C++ 使用 MSXML2 命名空间从 TBL 生成头文件。但是,使用标头和链接到 lib 是我最喜欢的避免使用 import 关键字的方法,因为它不是 c++ 标准。底线是避免在刷新旧项目时将两种方法混合在一起,这会导致这样的问题。

【讨论】:

  • 谢谢,问题已解决,现在正在编译项目!我不得不说,同时删除 'using' 语句和 'MSXML2::' 限定符对我来说似乎违反直觉,但随着最后期限的临近,我没有抱怨。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-07
  • 2011-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多