16,551
社区成员
发帖
与我相关
我的任务
分享
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;
}