错误C2011:'MSXML2 :: IXMLDOMImplementation':'struct'类型重定义

时间:2009-06-11 09:02:53

标签: c++ visual-studio-2008 msxml6 msxml3

我正在更改我的C ++项目,该项目早于VC6,现在正在迁移到VS 2008,使用MSXML 6代替早期的MSXML 3。 当代码在VC6中时,我们通过导入它来使用MSXML3

# import "msxml3.dll"

这被替换为

# import "msxml6.dll"

在我编译项目之后,我得到了这个以及其他几个类似的错误 错误C2011:'MSXML2 :: IXMLDOMImplementation':'struct'类型重新定义

以上错误位于msxml3.tlh文件中。

1)为什么msxml3仍在使用?

2)我将问题缩小到MSXML.h,它以某种方式自动包含在我的项目中。为什么是这样?

3)MSXML.h中引用了哪个版本的MSXML?

4)为什么VC ++会自动包含这么多头文件?如果我不想要包含一些头文件怎么办?

5)在c ++项目中使用MSXML6的正确方法是什么? #import,头文件?????

6)如何解决此问题?

随时给我.net。更清洁。 VC ++项目很乱。

3 个答案:

答案 0 :(得分:2)

检查#import指令的语法。您可以使用import directive(或rename_namespace)上的rename属性重命名导入的元素。它将解决与重复元素的冲突。

见这里:in MSDN

有时更改包含顺序(是 - 通过注释来尝试包含和导入语句的不同顺序)

不要与MS的错误作斗争,只要越过它们;)

答案 1 :(得分:1)

查看the MS docoumentation on MSXML

他们建议您按原样导入.dll将创建几个.thl和.tli文件。确保你已删除它们。

确保所有包含目录指向正确的位置。

绝对确定您没有在项目的其他位置导入msxml3。

要找到msxml.h,请执行CTRL + SHIFT + F并在整个解决方案中搜索“msxml”< - 请注意缺少.h,因为如果您正在正确导入它,则应该将其作为如下:

#include <msxml6.dll>

尝试一下......

答案 2 :(得分:0)

我尝试重命名msxml.h并进行构建。这应该显示包含msxml.h的文件。