msxml 6.0 dll 导入问题

在Windows 10系统中,编译原本在Win7环境下通过的64位工程时,遇到msxml6.dll导入警告和错误,原因是msxml6.dll在Windows 10中缺少DOMDocument定义。通过对比不同版本的msxml6.dll及生成的tlh文件,发现Windows 10的版本摒弃了旧功能。为解决问题,可以避免直接使用系统自带的msxml6.dll,而是指定使用兼容的版本。这涉及到了#import指令的搜索顺序和权限管理,此过程加深了对msxml发展历程、兼容性问题和系统文件修改的理解。
摘要由CSDN通过智能技术生成

问题现象:

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值