我可以使用我看到.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未安装)?
需要附加信息?请让我知道。谢谢!
.TLH文件(作为从.TLB导入的产品,它反过来是.IDL文件的编译版本)是接口,结构,方法等的描述,用于通过COM与另一个对象进行通信。没有保证或承诺实现这些接口的另一方已安装或以其他方式可用,甚至根本不存在。
是的,您有为您定义的签名方便。您可能需要安装实现该功能的运行时。无论您从何处获取开发详细信息,MSXML 4都可能需要单独安装。
“是的,你有为你方便定义的签名” - 混淆的便利LOL – 2014-11-24 20:06:48
如果您希望程序员转移到您的软件的下一个版本,那么您不要通过强制他们更改* everything *来完成此操作。 .h文件不够细致,不足以让它们进行分片处理,因此他们通过包含旧的和新的声明来解决它。你可以从.h文件中得知主要版本是2.6,3.0,4.0和6.0 – 2014-11-22 10:08:17