请教一个关于MSXML的内存释放问题?

clxye 2009-11-20 11:07:27
看网上一些关于load后资源释放的一些问题,不知我下面的代码会不会导致内存和资源泄露?还有,我下面的处理会不会存在什么隐患?

因为我这个是一个服务器程序,如果做得好的话,可能会有好几万的用户,一点点内存泄露累积下来都是很可怕的,麻烦高手帮忙看一下:


bool ReadConfig( const char *szFilePath )
{
char szConfigFilePath[MAX_PATH] = "";
VARIANT var;
ifstream fin;
MSXML2::IXMLDOMDocumentPtr pDoc = NULL;
MSXML2::IXMLDOMNodePtr pNode = NULL;
HRESULT hr;

// 判断文件存在
assert(szFilePath);
sprintf( szConfigFilePath, ".\\%s", szFilePath );
fin.open( szConfigFilePath );
if( !fin.is_open() )
{
fin.close();
printf( "%s\n", SETERRORINFO( "ReadConfig", "无法打开XML配置文件." ) );
return false;
}
fin.close();

// 创建MSXML实例
hr = pDoc.CreateInstance( __uuidof(MSXML2::DOMDocument40) );
if( FAILED(hr) )
{
SETERRORINFO( "ReadConfig", "无法创建DOMDocument对象, 请检查是否安装了MS XML Parser运行库." );
return false;
}

// 载入XML配置文件
if( VARIANT_FALSE == pDoc->load( szConfigFilePath ) )
{
printf( "%s\n", SETERRORINFO("IXMLDOMDocument::load", "加载XML配置文件失败.") );
return false;
}

// 读取根节点
if( (pNode = pDoc->selectSingleNode( "Config" )) == NULL )
{
printf( "%s\n", SETERRORINFO("IXMLDOMNode::selectSingleNode", "读取XML配置文件Config节点失败.") );
return false;
}

// 读取端口号节点
if( (pNode = pNode->selectSingleNode( "Port" )) == NULL )
{
printf( "%s\n", SETERRORINFO("IXMLDOMNode::GetfirstChild", "读取XML配置文件Port节点失败.") );
return false;
}

// 读取Port节点值
if( FAILED(hr = pNode->get_nodeTypedValue( &var )) )
{
printf( "%s\n", SETERRORINFO("IXMLDOMNode::get_nodeTypedValue", "读取XML配置文件Port节点值失败.") );
return false;
}
else
{
g_port = atoi( (char*)(_bstr_t)var.bstrVal );
}

return true;
}


...全文
158 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
clxye 2009-11-20
  • 打赏
  • 举报
回复
hello,happyparrot!

很高兴见到你,我对MSXML不是太了解,也不清楚该释放哪些资源,如何释放,如果你熟悉MSXML的话还希望指导一下。
快乐鹦鹉 2009-11-20
  • 打赏
  • 举报
回复
创建的实例对象需要释放。注意各个return false。在返回之前也要进行资源释放。
clxye 2009-11-20
  • 打赏
  • 举报
回复
为什么这么安静?

指点一下啊...

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧