找不到MSXML2命名空間

2022-03-27 02:05:43 字數 1033 閱讀 4717

以前在xp上開發的乙個程式,今天在win7上發現無法執行,除錯時提示「找不到msxml2命名空間」,新增引用時找不到「msxml2」,後來發現原來是這樣,下面是別人寫的:

解析xml檔案使用到了微軟的msxml ,在xp下使用的時候,只要#import 編譯就可以順利通過,

當把工程移植到vista上的時候就會遇到找不到 msxml.dll的錯誤。

原來在vista上msxml.dll公升級為msxml6.dll,

只要把#import 改成#import

相應using namespace msxml改成using namespace msxml2編譯即可通過

那麼vista下編譯後的可執行檔案是不是不可以在xp下使用呢?

網上的有種方法是: 

#if (_win32_winnt >= 0x0600) 

#import

#else 

#import

#endif 

這種做法是沒有必要的

下面是一位網友給出的解釋:

com元件的使用方式,開發環境和執行環境是不同的。開發環境要使用最新的sdk才能支援最新的作業系統,所以要用#import msxml6.dll,但是到了執行環境,程式並不會直接載入msxml6.dll,而是通過cocreateinstance來載入的,傳遞的是progid或者clsid,系統會在登錄檔中找到對應的dll檔案,如果執行在vista下,系統會幫你載入msxml6.dll,如果在xp環境下,系統幫你載入msxml.dll。但是程式不能使用ixmldocument6,因為在xp環境下,msxml.dll並不支援這個版本。 

這個特徵是com最基本的特徵:保持二進位制相容,即使元件版本公升級,也能在新環境下執行舊版的程式,因為新版元件一定會保留舊版元件的介面。

新增 引用之後:

MSXML2使用筆記

這段時間開發,需要對xml檔案進行解析,讀取。特對msxml2的工作流程做乙個總結 記憶。當然,一般用智慧型指標ccomptr和ccombstr來封裝com介面指標和bstr字串。廢話 msxml是一套微軟提供的com介面。包括如下介面 1 ixmldomdocument 一般用智慧型指標ccomp...

明明引用了dll,但是還是找不到命名空間

遇到乙個怪異的問題,明明用了dll,但是死活找不到命名空間,死活無法呼叫引用的類。後來發現原因是引用的dll是.net framework 4.而當前專案是.net framework 4 client profile。導致不相容所致。net framework client profile net...

用xsl格式化MSXML2操作的XML檔案

msxml2 ixmldomdocument2ptr cxmldomfile xmlnormalize msxml2 ixmldomdocument2ptr pxmldocold 對上述問題,解釋與解決方案如下 msxml dom 錯誤 兩個常見的錯誤從 xml 文件物件模型 dom 介面方法返回的...