请教各位如下问题:操作系统:XP
编译器用的是VC6.0
在系统目录下是可以搜索到MSXML4.dll我的头文件
#import <MSXML4.dll> named_guids
using namespace MSXML2;
#include <atlbase.h>程序主体
{
HRESULT hr;
IXMLDOMDocumentPtr spXMLDOM = NULL;
IXMLDOMNodePtr pIDOMNode = NULL;
CoInitialize(NULL);
hr = spXMLDOM.CreateInstance(_uuidof(DOMDocument));
#if 0
/*解析过程*/
#endif
spXMLDOM->Release();
spXMLDOM = NULL;
CoUninitialize();
}运行结果
1)在将解析过程注释掉的情况下会Down机.
2)打开解析过程,则在解析过程中Release pIDOMNode,并将pIDOMNode置为NULL时会Down机.
3)去掉spXMLDOM->Release()和spXMLDOM = NULL 还是会Down。请问何故?
谢谢!
编译器用的是VC6.0
在系统目录下是可以搜索到MSXML4.dll我的头文件
#import <MSXML4.dll> named_guids
using namespace MSXML2;
#include <atlbase.h>程序主体
{
HRESULT hr;
IXMLDOMDocumentPtr spXMLDOM = NULL;
IXMLDOMNodePtr pIDOMNode = NULL;
CoInitialize(NULL);
hr = spXMLDOM.CreateInstance(_uuidof(DOMDocument));
#if 0
/*解析过程*/
#endif
spXMLDOM->Release();
spXMLDOM = NULL;
CoUninitialize();
}运行结果
1)在将解析过程注释掉的情况下会Down机.
2)打开解析过程,则在解析过程中Release pIDOMNode,并将pIDOMNode置为NULL时会Down机.
3)去掉spXMLDOM->Release()和spXMLDOM = NULL 还是会Down。请问何故?
谢谢!
CoInitialize(NULL);
{
MSXML2::IXMLDOMDocumentPtr spXMLDOM = NULL;
MSXML2::IXMLDOMNodePtr pIDOMNode = NULL;
hr = spXMLDOM.CreateInstance(_uuidof(MSXML2::DOMDocument)); spXMLDOM->loadXML(_bstr_t("<?xml version='1.0'?><node caption='hello'/>"));
pIDOMNode=spXMLDOM->documentElement;
MessageBox(NULL,pIDOMNode->attributes->getNamedItem(_bstr_t("caption"))->text,_T(""),0);
}
CoUninitialize();
举个例子。你的spXMLDOM等会再CoUninitialize后面销毁,而那个时候由于已经执行了CoUnitialize,导致的问题
{
HRESULT hr;
IXMLDOMDocumentPtr spXMLDOM = NULL;
IXMLDOMNodePtr pIDOMNode = NULL;
CoInitialize(NULL);
hr = spXMLDOM.CreateInstance(_uuidof(DOMDocument));
CoUninitialize();
}
还是会Down,这样我并没有自己Realease啊。
谢谢!
可是在函数返回之前,调用了CoUninitialize();释放了COM库,那么在这之后释放智能指针一般是要出错的了。==========================================
我们的骄傲多半是基于我们的无知。——《莱辛寓言》
CSDN助手 签名走马灯
{
CoInitialize(NULL);
HRESULT hr;
IXMLDOMDocumentPtr spXMLDOM = NULL;
IXMLDOMNodePtr pIDOMNode = NULL;
hr = spXMLDOM.CreateInstance(_uuidof(DOMDocument));
if(spXMLDOM!=NULL)
spXMLDOM.Release();
CoUninitialize();
}
=================================================
当你幸福的时候,切勿丧失使你成为幸福的德行。——莫罗阿
CSDN助手 签名走马灯
谢谢!
CoInitialize(NULL);
{
这里来声明 *****Ptr
}
CoUninitialize();
这样来调用,来确保所有的COM对象的生存期都在CoInitialize和CoUninitialize内