几年前我在工作中不得不做出同样的决定。
版本6是最适合使用的MSDN状态,但是它们没有在SDK中提供合并模块,并且您不能像在版本4中那样在应用程序中分发它。版本4被版本6所取代,版本5专门用于MS Office。第3版仍然是旧机器上的目标版本。
最后,我采取了一种优雅的降级方法,尝试首先使用6,然后失败使用版本3(代码是C++):
代码语言:javascript运行复制inline bool CXMLDocument::CreateXMLDOMFactory(void)
{
wxMutexLocker lock(sm_mXMLDOMFactory);
if(!sm_pXMLDOMFactory)
{
::CoGetClassObject(CLSID_DOMDocument60, CLSCTX_ALL, 0, IID_IClassFactory, reinterpret_cast
if(!sm_pXMLDOMFactory)
{
::CoGetClassObject(CLSID_DOMDocument40, CLSCTX_ALL, 0, IID_IClassFactory, reinterpret_cast
if(!sm_pXMLDOMFactory)
::CoGetClassObject(CLSID_DOMDocument30, CLSCTX_ALL, 0, IID_IClassFactory, reinterpret_cast
}
}
return sm_pXMLDOMFactory != 0;
}我们注意到在从version 4迁移到version 6之后,性能得到了可测量的改进,尽管您必须显式地在文档上设置NewParser属性以获得这种好处,例如:
代码语言:javascript运行复制pDocument->setProperty(_bstr_t(L"NewParser"), VARIANT_TRUE);由于安全性考虑、远程DTD等原因,在加载文档时还有几个环要跳过。同样,这是通过文档上的属性完成的,因此值得查找MSDN中的ProhibitDTD、UseInlineSchema、AllowXsltScript和ServerHTTPRequest属性,看看它们是否适用于您的使用。