MSXML SDK文档的例子:
很不幸,不能编译通过。首先也许我装的msxml4.dll里还没有IXMLDOMDocument3Ptr定义,要改为IXMLDOMDocument2Ptr。
然后看到http://www.cnblogs.com/babyblue/archive/2005/05/13/154430.html这里说释放智能指针要用pXMLDom = NULL。可是MS的例子确都用Release()。孰是孰非,我
实践下来智能指针释放应该赋NULL。
#include <stdio.h>
#import <msxml4.dll>
using namespace MSXML2;
int main(int argc, char* argv[])
{
IXMLDOMDocument3Ptr pXMLDom;
HRESULT hr;
CoInitialize(NULL);
hr= pXMLDom.CreateInstance(__uuidof(DOMDocument40));
if (FAILED(hr))
{
printf("Failed to instantiate an XML DOM.\n");
return -1;
}
pXMLDom->async = VARIANT_FALSE; // default - true,
if(pXMLDom->load("stocks.xml")!=VARIANT_TRUE)
{
printf("Failed to load stocks.xml:\n%s\n",
(LPCSTR)pXMLDom->parseError->Getreason());
return -1;
}
else
printf("XML DOM loaded from stocks.xml:\n%s\n",
(LPCSTR)pXMLDom->xml);
pXMLDom.Release();
CoUninitialize();
return 0;
}
#import <msxml4.dll>
using namespace MSXML2;
int main(int argc, char* argv[])
{
IXMLDOMDocument3Ptr pXMLDom;
HRESULT hr;
CoInitialize(NULL);
hr= pXMLDom.CreateInstance(__uuidof(DOMDocument40));
if (FAILED(hr))
{
printf("Failed to instantiate an XML DOM.\n");
return -1;
}
pXMLDom->async = VARIANT_FALSE; // default - true,
if(pXMLDom->load("stocks.xml")!=VARIANT_TRUE)
{
printf("Failed to load stocks.xml:\n%s\n",
(LPCSTR)pXMLDom->parseError->Getreason());
return -1;
}
else
printf("XML DOM loaded from stocks.xml:\n%s\n",
(LPCSTR)pXMLDom->xml);
pXMLDom.Release();
CoUninitialize();
return 0;
}
然后看到http://www.cnblogs.com/babyblue/archive/2005/05/13/154430.html这里说释放智能指针要用pXMLDom = NULL。可是MS的例子确都用Release()。孰是孰非,我
实践下来智能指针释放应该赋NULL。