问题现象:
Windows 10操作系统下编译现win7编译64位通过的工程,出现如下错误:
1>.\xxx.cpp(20) : warning C4192: 导入类型库“ISequentialStream”时自动排除“Msxml6.dll”
1>.\xxx.(20) : warning C4192: 导入类型库“_FILETIME”时自动排除“Msxml6.dll”
1>.\xxx.0.cpp(359) : error C2039: “DOMDocument”: 不是“MSXML2”的成员
代码片段:
#include "stdafx.h"
#ifndef _M_X64
#import "Msxml4.dll"
#else
#import "Msxml6.dll"
#endif
BOOL WINAPI Function(const _bstr_t& bstrXml, LPSEDL_INFO lpSedlInfo)
{
MSXML2::IXMLDOMDocument2Ptr spDOMDoc = NULL;
VARIANT_BOOL vtBool = VARIANT_TRUE;
try
{
if(FAILED(spDOMDoc.CreateInstance(__uuidof(MSXML2::DOMDocument/*40*/))))
{
::OutputDebugString(_T("创建读SEDL文件组件失败!"));
return FALSE;
}
}
/*其余代码省略*/
}
定位过程:
再次工程已经确认windows 7 编译确实顺利通过,包括重新构建等常识;
通过vs右键打开源代码对应的文件功能类似include功能,发现msxml6.0文件找不到,最初怀该文件丢失;
尝试从其他ok的版本拷贝到改工程附件包含头文件的目录下/I配置下,发现问题任然出现;
后来得知需要单独安装msxml 过程发现msxml6已经安装,通过文件搜索确认该文件确实已经存在 在%SYSTEM%\目录下 C:\Windows\SysWOW64和C:\Windows\System32均有,当然此处编译的64位所以只关心前者。
对比Windows 10的 msxml6.dll和Windows 7的msxml6.dll发现居然不一样,并且通过生成的导出msxml6.tlh 和msxml6.tli,确认Window