读书人

底下这段MSXML哪里引用计数不对了

发布时间: 2013-09-10 13:42:18 作者: rapoo

下面这段MSXML哪里引用计数不对了


<?xml version="1.0" encoding="GB2312"?>
<Device id="10041" name="设备1">
<Type>13</Type>
<TypeName>保护</TypeName>
</Device>


CoInitialize(NULL);

CComPtr<IXMLDOMDocument> spXMLDOM = NULL;

HRESULT hr = spXMLDOM.CoCreateInstance(__uuidof(DOMDocument));
VARIANT_BOOL bSuccess = FALSE;

hr = spXMLDOM->load(CComVariant(L"xmlfile.xml") , &bSuccess);

CComPtr<IXMLDOMNode> spDevice = NULL;
CComBSTR bstrSS(L"Device");
hr = spXMLDOM->selectSingleNode(bstrSS , &spDevice);

CComQIPtr<IXMLDOMElement> spDev;
spDev = spDevice;

hr = spDev->setAttribute(CComBSTR(L"name") , CComVariant(L"测试设备"));
hr = spDev->setAttribute(CComBSTR(L"has_product") , CComVariant(true));

CComPtr<IXMLDOMNode> spModelNode = NULL;

hr = spXMLDOM->createNode(CComVariant(NODE_ELEMENT),CComBSTR(L"Model"),NULL,
&spModelNode);

CComPtr<IXMLDOMNode> spInsertedNode = NULL;
hr = spDevice->appendChild(spModelNode , &spInsertedNode);

CString strID(L"3");

hr = spInsertedNode->put_text(strID.AllocSysString());

hr = spXMLDOM->save(CComVariant(L"myxmlfile.xml"));

CoUninitialize();


哪儿计数不对了??函数运行结束的时候崩溃了
[解决办法]
在CoUninitialize()前面加上以下语句可避免运行结束时崩溃:

spXMLDOM.Release();
spDevice.Release();
spDev.Release();
spModelNode.Release();
spInsertedNode.Release();

读书人网 >C++

热点推荐