zoukankan      html  css  js  c++  java
  • 找不到MSXML2命名空间

    以前在XP上开发的一个程序,今天在Win7上发现无法运行,调试时提示“找不到MSXML2命名空间”,添加引用时找不到“MSXML2”,后来发现原来是这样,下面是别人写的:

    解析XML文件使用到了微软的msxml ,在xp下使用的时候,只要#import <msxml.dll>编译就可以顺利通过,

    当把工程移植到Vista上的时候就会遇到找不到 msxml.dll的错误。

    原来在Vista上msxml.dll升级为msxml6.dll,

    只要把#import <msxml.dll>改成#import <msxml6.dll>

    相应using namespace MSXML改成using namespace MSXML2编译即可通过

     

    那么Vista下编译后的可执行文件是不是不可以在XP下使用呢?

    网上的有种方法是: 
    #if (_WIN32_WINNT >= 0x0600) 
    #import <msxml6.dll> 
    #else 
    #import <msxml.dll> 
    #endif 

    这种做法是没有必要的

     

    下面是一位网友给出的解释:

    COM组件的使用方式,开发环境和运行环境是不同的。开发环境要使用最新的SDK才能支持最新的操作系统,所以要用#import msxml6.dll,但是到了运行环境,程序并不会直接加载msxml6.dll,而是通过CoCreateInstance来加载的,传递的是PROGID或者CLSID,系统会在注册表中找到对应的dll文件,如果运行在vista下,系统会帮你加载msxml6.dll,如果在xp环境下,系统帮你加载msxml.dll。但是程序不能使用IXmlDocument6,因为在XP环境下,msxml.dll并不支持这个版本。 

    这个特征是COM最基本的特征:保持二进制兼容,即使组件版本升级,也能在新环境下运行旧版的程序,因为新版组件一定会保留旧版组件的接口。

     

    转:http://blog.csdn.net/immcss/article/details/3862184?reload

     

    添加 引用之后:

  • 相关阅读:
    Leetcode Substring with Concatenation of All Words
    Leetcode Divide Two Integers
    Leetcode Edit Distance
    Leetcode Longest Palindromic Substring
    Leetcode Longest Substring Without Repeating Characters
    Leetcode 4Sum
    Leetcode 3Sum Closest
    Leetcode 3Sum
    Leetcode Candy
    Leetcode jump Game II
  • 原文地址:https://www.cnblogs.com/haocool/p/2915481.html
Copyright © 2011-2022 走看看