2014-11-22 39 views
0

背景:我可以使用我看到.TLH文件公開的所有功能嗎?

我有一個現有的代碼,使用由微軟提供的功能,通過HTTP發佈XML數據。具體來說,msxml4.dll(COM)中的IServerXMLHTTPRequest(包含在MSXML3及更高版本中)。我正在轉移到msxml6.dll,因爲msxml4.dll不再受支持(被MSXML6取代)。 More information about MSXML versions

代碼:

#import "msxml6.dll" 
using namespace MSXML2; 
… 
IServerXMLHTTPRequestPtr spIXMLHTTPRequest = NULL; 
hr = spIXMLHTTPRequest.CreateInstance(__uuidof(ServerXMLHTTP40)); 

問題:

當建立我的msxml4.dll的應用程序以及msxml6.dll包括在msxml4.tlh和msxml6.tlh以下分別爲:

struct __declspec(uuid("88d969c6-f192-11d4-a65f-0040963251e5")) 
ServerXMLHTTP40; 
    // [ default ] interface IServerXMLHTTPRequest2 

據我所知,看着msxml6.tlh,我可以用ServerXMLHTTP40(而不是將代碼更改爲ServerXMLHTTP60)與msxml6.dll(DOMDocument40,FreeThreadedDOMDocument40,等)相同。

現在,在新的Windows 7旗艦版安裝中搜索註冊表,我無法找到上面的uuid。其結果是,該代碼失敗,這臺機器上:

hr = spIXMLHTTPRequest.CreateInstance(__uuidof(ServerXMLHTTP40)); 

問題:

如果MSXML6被暴露ServerXMLHTTP40,那爲什麼我不能在註冊表中找到了嗎?安裝msxml6時是否可以使用ServerXMLHTTP40(msxml4未安裝)?

需要附加信息?請讓我知道。謝謝!

+1

如果您希望程序員轉移到您的軟件的下一個版本,那麼您不要通過強制他們更改* everything *來完成此操作。 .h文件不夠細緻,不足以讓它們進行分片處理,因此他們通過包含舊的和新的聲明來解決它。你可以從.h文件中得知主要版本是2.6,3.0,4.0和6.0 – 2014-11-22 10:08:17

回答

2

.TLH文件(作爲從.TLB導入的產品,它反過來是.IDL文件的編譯版本)是接口,結構,方法等的描述,用於通過COM與另一個對象進行通信。沒有保證或承諾實現這些接口的另一方已安裝或以其他方式可用,甚至根本不存在。

是的,您有爲您定義的簽名方便。您可能需要安裝實現該功能的運行時。無論您從何處獲取開發詳細信息,MSXML 4都可能需要單獨安裝。

+0

「是的,你有爲你方便定義的簽名」 - 混淆的便利LOL – 2014-11-24 20:06:48

相關問題