C++ visualc+中容错DLL的使用+;
背景:C++ visualc+中容错DLL的使用+;,c++,windows,dll,com,msxml,C++,Windows,Dll,Com,Msxml,背景: #import "msxml4.dll" using namespace MSXML2; … IServerXMLHTTPRequestPtr spIXMLHTTPRequest = NULL; hr = spIXMLHTTPRequest.CreateInstance(__uuidof(ServerXMLHTTP40)); 我有一个现有的代码,它使用Microsoft提供的功能通过HTTP发布XML数据。具体地说,IServerXMLHTTPRequest(包含在MSXML3和更高版
#import "msxml4.dll"
using namespace MSXML2;
…
IServerXMLHTTPRequestPtr spIXMLHTTPRequest = NULL;
hr = spIXMLHTTPRequest.CreateInstance(__uuidof(ServerXMLHTTP40));
我有一个现有的代码,它使用Microsoft提供的功能通过HTTP发布XML数据。具体地说,IServerXMLHTTPRequest(包含在MSXML3和更高版本中)来自msxml4.dll(COM)
问题:
#import "msxml4.dll"
using namespace MSXML2;
…
IServerXMLHTTPRequestPtr spIXMLHTTPRequest = NULL;
hr = spIXMLHTTPRequest.CreateInstance(__uuidof(ServerXMLHTTP40));
在可能的情况下,如果客户端工作站上缺少MSXML4.DLL,所描述的POST操作将失败
当前代码:
#import "msxml4.dll"
using namespace MSXML2;
…
IServerXMLHTTPRequestPtr spIXMLHTTPRequest = NULL;
hr = spIXMLHTTPRequest.CreateInstance(__uuidof(ServerXMLHTTP40));
备选方案:
#import "msxml4.dll"
using namespace MSXML2;
…
IServerXMLHTTPRequestPtr spIXMLHTTPRequest = NULL;
hr = spIXMLHTTPRequest.CreateInstance(__uuidof(ServerXMLHTTP40));
#import "msxml4.dll"
using namespace MSXML2;
…
IServerXMLHTTPRequestPtr spIXMLHTTPRequest = NULL;
hr = spIXMLHTTPRequest.CreateInstance(__uuidof(ServerXMLHTTP40));
将我的代码更改为不可知MSXML版本的最简单、最健壮的方法是什么?也就是说,不管客户机上实际安装的MSXML版本是什么,都要使用IServerXMLHTTPRequest。如果未安装MSXML版本,请提示用户并正常退出
需要补充信息吗?请告诉我
谢谢大家! 来自:
MSXML版本3.0是支持版本独立的GUI和ProgID的最后一个MSXML版本。从版本4.0开始,MSXML以并排模式安装在您的计算机上。这意味着,例如,为Microsoft Office应用程序安装MSXML 5.0不会替换计算机上以前安装的任何MSXML解析器版本。这样做是为了保护当前使用MSXML早期版本的应用程序的质量。并排模式还允许您决定在代码中使用哪个版本的解析器
这意味着没有安装任何COM类,您可以实例化这些COM类,以获取最新安装的版本,否则其他人将根据可用性或其他条件为您决定是否加载MSXML 4或6
您需要使用特定的版本,并取决于要提供或安装的相应运行时。或者您可以在代码中的MSXML版本之间切换。msxml4的要点是您可以自己安装它。因此,如果它丢失了,那么您做错了:)不,MSXML4不再受支持:。我想使用机器上存在的版本。感谢您的评论。您正在创建一个
ServerXMLHTTP40
的实例,即版本4对象。如果失败,您可以尝试另一个版本:If(FAILED(hr)){//hr=…CoCreateInstance(…60);}
这正是这家伙所做的:。这并不完全是我想要的,因为我希望在我的代码中没有版本指示(如果可能的话…)。感谢您的评论@RomanR。