• 获取正确的MSXML版本


    问题来源
    在微软的官方blog中对于msxml的版本进行一些说明,连微软自己也承认,目前的msxml版本太过于混乱了,以致于很难使用。

    版本信息
    MSXML是与浏览器或者Office相关的,大部分MSXML是与浏览器相关,只有MSXML5是主要为Office2003开发的,因此如果想要使用MSXML5.dll来作为浏览器的访问,并不被微软推荐,微软希望使用最近的MSXML6来操作XML,但是由于2001年,推出IE6.0(也就是XP上的,2k系统带的是IE5.0版本)时带的是MSXML3.dll版本,因此大部分系统都是支持MSXML3.DLL的。

    哪个合理
    目前的系统中,很多时候MSXML3.dll,MSXML4.DLL,MSXM5.DLL,MSXML6.DLL都是存在于系统中,编程中选择合理的XML版本,可以减少因为不同版本带来的差异形成问题的查找时间。微软推荐使用MSXML3.DLL和MSXML6.DLL,一个是最广泛的,一个是最新的。

    在VC中使用import导入dll后,可以使用上面的MSXML,但是需要注意的是,__uuidof(MSXML2::DOMDocument)创建IXMLDOMDocumentPtr对象时的一些问题。需要注意的是,即使你在文件开头用import导入了MSXML4.DLL或者其他版本,__uuidof(MSXML2::DOMDocument)加载的仍旧是MSXML3.DLL中的接口对象,微软的原话是 The versionindependent ProgID is always bound to MSXML 3 (a lot of people think it picks up the 
    latest MSXML that is on the box).  This means the version independent ProgID and the 3.0” ProgIDs will return the same object. 

    因此,无比记住自己使用什么版本创建DOMDocument,必须制定其版本号,如MSXML4.DLL使用的MSXML2::DOMDocument40来获取uuid,即 __uuidof(MSXML2::DOMDocument40),当然是用其他版本的MSXML,可以先使用__uuidof(MSXML2::DOMDocument)来生成tlh文件,之后在tlh文件查找正确要使用的DOMDocument。


    后记:
    在最近新开发的ActiveX控件中,频频出现一些问题,有些知道的,也有些不知道的。新近的一次调试中,使用MSXML2::IXMLDOMDocumentPtr对象的指针进行xml的save方法调用,结果爆出异常,非常纳闷,后来发现,我导入的头是msxml4.dll,而内存中加载的是msxml3.dll,很明显,这之间必然会有一些问题,但是为什么连保存也不能够我也不清楚,希望了解的告诉一声。

    这里有一篇如何使用MSXML方法的blog
  • 相关阅读:
    android界面基本属性
    iOS请求webservice
    图片在鼠标经过时变大
    控制字体大小,em与px的区别与应用
    IE的另类CSS hack,条件注释
    几种流行的AJAX框架jQuery,Mootools,Dojo,Ext JS的对比
    CSS实现文字压在边线上的效果,fieldset与legend
    每个.NET 开发人员应该下载的十个必备工具
    css做出丰富的Tooltips
    .NET牛人应该知道些什么?
  • 原文地址:https://www.cnblogs.com/ubunoon/p/1529697.html
Copyright © 2020-2023  润新知