2014-11-22 37 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

相关问题