64,683
社区成员
发帖
与我相关
我的任务
分享
IUnknown * pIUnknown;
//lvIUnknown = new (IUnknown*); COM对象和普通对象还是不同的
ErrState = Err_NoError;
//Create XML Document Object
::CoInitialize(NULL);
CComPtr <MSXML::IXMLDOMDocument> spDoc;
HRESULT hr;
hr = spDoc.CoCreateInstance(__uuidof(MSXML::DOMDocument));
//Load XML File From Path
bool bSuccess = true;
bSuccess = Load_XML(XML_Path, spDoc);
//不用查IXMLDOMDocument的接口了,智能指针CoCreateInstance的时候已经有了,作为模板
//hr = spDoc->QueryInterface(IID_IXMLDOMDocument, (void**)&pIUnknown);
//AddRef无需开发者关心,如果不用智能指针,需要调用release,否则也无需关心
//这四条代码是我们讨论的地方
//*lvIUnknown = pIUnknown;
//(*lvIUnknown)->AddRef();
//(*lvIUnknown)->Release();
//pIUnknown->Release();
CComBSTR XML_File;
if(SUCCEEDED(hr))
{
hr = spDoc->get_xml(&XML_File);
}
File_Content = _com_util::ConvertBSTRToString(XML_File.m_str);
iLength = strlen(File_Content);
//这句是为了返回给lvIUnknown双重指针的
//使用lvIUnknown的人要自己调用release,否则内存泄漏。
*lvIUnknown = spDoc.p;
spDoc.p = NULL;
//可有可无,但在智能指针和普通指针混用情况下要小心
//spDoc.Release();
::CoUninitialize();