背景:
我有一个现有代码,该代码使用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
)(与DOMDocument40
,FreeThreadedDOMDocument40
,XMLSchemaCache40
等相同)。现在,在全新的Windows 7 Ultimate安装中搜索注册表,找不到上面的uuid。结果,此代码在此计算机上失败:
hr = spIXMLHTTPRequest.CreateInstance(__uuidof(ServerXMLHTTP40));
问题:
如果msxml6公开了ServerXMLHTTP40,为什么为什么在注册表中找不到它?安装msxml6(未安装msxml4)时可以使用
ServerXMLHTTP40
吗?需要其他信息吗?请让我知道。谢谢!
最佳答案
.TLH文件(作为从.TLB导入的产品,而后者又是.IDL文件的编译版本)是接口,结构,方法等的描述,接口,结构,方法等用于通过COM与另一个对象进行通信。不能保证或保证实现这些接口的另一方已安装或以其他方式可用,甚至根本不存在。
是的,为方便起见,您已经定义了签名。您可能需要安装实现该功能的运行时。无论您从何处获得开发详细信息,MSXML 4可能都需要单独安装。