【发布时间】:2015-01-20 06:25:42
【问题描述】:
背景:
我有一个使用 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,我可以将ServerXMLHTTP40(而不是将代码更改为ServerXMLHTTP60)与 msxml6.dll(DOMDocument40、FreeThreadedDOMDocument40、XMLSchemaCache40 等相同。 )。
现在,在全新的 Windows 7 Ultimate 安装中搜索注册表,我找不到上面的 uuid。结果,这段代码在这台机器上失败了:
hr = spIXMLHTTPRequest.CreateInstance(__uuidof(ServerXMLHTTP40));
问题:
如果 msxml6 暴露了 ServerXMLHTTP40,为什么我在注册表中找不到它?安装了msxml6(没有安装msxml4)可以用ServerXMLHTTP40吗?
需要更多信息?让我知道。谢谢!
【问题讨论】:
-
如果您希望程序员迁移到您的软件的下一个版本,那么您不会强迫他们更改所有内容。 .h 文件的粒度不够细,无法让他们零碎地做,所以他们通过包含新旧声明来解决它。您可以从 .h 文件中看出主要版本是 2.6、3.0、4.0 和 6.0