6

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

# import "msxml3.dll"

这被替换为

# import "msxml6.dll"

在此之后,当我编译项目时,我得到了这个和其他几个类似的错误 Error C2011: 'MSXML2::IXMLDOMImplementation' : 'struct' type redefinition

上述错误在 msxml3.tlh 文件中。

1) 为什么还在使用 msxml3?

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

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

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

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

6)我该如何解决这个问题?

随时给我.net。干净多了。VC++ 项目是一团糟。

4

3 回答 3

2

看看MSXML 上的 MS 文档

他们建议按照您的方式导入 .dll 将创建几个 .thl 和 .tli 文件。确保你已经删除了这些。

确保任何包含目录都指向正确的位置。

确保您没有在项目的其他地方导入 msxml3。

要找到 msxml.h,请按 CTRL + SHIFT + F 并在整个解决方案中搜索 'msxml' <- 请注意缺少 .h,因为如果您已正确导入它,则应按如下方式完成:

#include <msxml6.dll>

尝试一些...

于 2009-06-11T09:33:38.550 回答
2

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

见这里:在 MSDN

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

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

于 2009-06-15T22:08:32.247 回答
0

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

于 2009-06-12T08:08:41.167 回答