以前在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
添加 引用之后: