背景:

我有一个现有代码,该代码使用Microsoft提供的功能通过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,我可以对msxml6.dll使用ServerXMLHTTP40(而不是将代码更改为ServerXMLHTTP60)(与DOMDocument40FreeThreadedDOMDocument40XMLSchemaCache40等相同)。

现在,在全新的Windows 7 Ultimate安装中搜索注册表,找不到上面的uuid。结果,此代码在此计算机上失败:

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


问题:

如果msxml6公开了ServerXMLHTTP40,为什么为什么在注册表中找不到它?安装msxml6(未安装msxml4)时可以使用ServerXMLHTTP40吗?

需要其他信息吗?请让我知道。谢谢!

最佳答案

.TLH文件(作为从.TLB导入的产品,而后者又是.IDL文件的编译版本)是接口,结构,方法等的描述,接口,结构,方法等用于通过COM与另一个对象进行通信。不能保证或保证实现这些接口的另一方已安装或以其他方式可用,甚至根本不存在。

是的,为方便起见,您已经定义了签名。您可能需要安装实现该功能的运行时。无论您从何处获得开发详细信息,MSXML 4可能都需要单独安装。

10-08 08:32