Che*_*eso 47 windows com scripting msxml visual-c++
这似乎是一个常见的问题,虽然我无法在SO上找到它.
我应该在我的应用程序中使用哪个版本的MSXML,更重要的是,我该如何决定?
有MSXML3,4,5和6.
我最近在使用MSXML v4的call-wcf-service-by-vbscript中发布了一些代码.AnthonyWJones发布我不应该使用4,而是使用3或6,但可能是3.当然不是v5!
为什么?我想更多地了解选择在我的应用中使用的MSXML版本的标准.
奖金问题:有没有人总结过各种版本的MSXML随时间的差异?
截至目前的摘要:
Sho*_*og9 24
如果您需要在Win2k之前支持Windows操作系统版本,请使用MSXML3.否则,请使用MSXML6.
MSXML4处于维护模式.
实际上从未实际支持MSXML5在MS-Office之外使用.
Phi*_*oth 12
几年前我不得不在我的工作中做出同样的决定.
在MSDN指出该版本6是最优的使用,但是它们不提供的SDK合并模块,并且你不允许它在你的应用程序分发,你可以同版本4版4 6版和所取代版本5专门用于MS Office.版本3仍然是旧机器上的目标版本.
我最终做的是采用优雅的降级方法并尝试首先使用6,失败版本4,然后使用版本3失败(代码是C++):
inline bool CXMLDocument::CreateXMLDOMFactory(void)
{
wxMutexLocker lock(sm_mXMLDOMFactory);
if(!sm_pXMLDOMFactory)
{
::CoGetClassObject(CLSID_DOMDocument60, CLSCTX_ALL, 0, IID_IClassFactory, reinterpret_cast<void **>(&sm_pXMLDOMFactory));
if(!sm_pXMLDOMFactory)
{
::CoGetClassObject(CLSID_DOMDocument40, CLSCTX_ALL, 0, IID_IClassFactory, reinterpret_cast<void **>(&sm_pXMLDOMFactory));
if(!sm_pXMLDOMFactory)
::CoGetClassObject(CLSID_DOMDocument30, CLSCTX_ALL, 0, IID_IClassFactory, reinterpret_cast<void **>(&sm_pXMLDOMFactory));
}
}
return sm_pXMLDOMFactory != 0;
}
Run Code Online (Sandbox Code Playgroud)
从版本4迁移到版本6后,我们注意到了可测量的性能改进,尽管您必须NewParser在文档上显式设置属性才能获得此优势,例如:
pDocument->setProperty(_bstr_t(L"NewParser"), VARIANT_TRUE);
Run Code Online (Sandbox Code Playgroud)
出于安全考虑,远程DTD等原因,在加载文档时还需要更多的环节.再次,这是通过在文档属性来完成,所以这是值得仰视ProhibitDTD,UseInlineSchema,AllowXsltScript并ServerHTTPRequest在MSDN属性,看看它们是否适用于您的使用.
| 归档时间: |
|
| 查看次数: |
22542 次 |
| 最近记录: |