以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 XML基础 』  (http://bbs.xml.org.cn/list.asp?boardid=1)
----  VC6.0 显示XML加载成功,但是查不出(故意)的错误,应该怎样做呢?  (http://bbs.xml.org.cn/dispbbs.asp?boardid=1&rootid=&id=87270)


--  作者:sjjq
--  发布时间:10/21/2010 1:43:00 PM

--  VC6.0 显示XML加载成功,但是查不出(故意)的错误,应该怎样做呢?
我建了一个测试用的简单 hhh.xml,内容是
<?xml version="1.0" encoding="UTF-8"?>
<BaiAn>
<q1>
<d1>0</d1>
<d2>258</d2>
</q1>
</BaiAn2011>  这里故意把标签写错

然后在vc6.0(sdk编程)MSXML 加载这个hhh.xml文件,显示成功,为什么呢?MSXML加载时不做检查的吗?请教一下!  代码如下:

HRESULT hr;
hr=CoInitialize(NULL);                        //初始化COM
if (FAILED(hr))
   throw "COM初始化失败!";
                    
IXMLDOMDocumentPtr pDoc;             //创建XML解析对象
hr = pDoc.CreateInstance(__uuidof(DOMDocument));
if (FAILED(hr))
   throw "创建XML解析对象实例失败!";
     
pDoc ->async = VARIANT_FALSE;
pDoc ->validateOnParse = VARIANT_TRUE;

try
{
    hr = pDoc->load(_T("G:\hhh.xml"));    //加载xml文件
    if (FAILED(hr))
       throw "load xml 文件失败";
    if (SUCCEEDED(hr))
       throw "load 成功";
}
catch(const char message[]);
{
     MessageBoxA(NULL,message,"标题",MB_OK);
}

请赐教!谢谢......


--  作者:sjjq
--  发布时间:10/21/2010 5:38:00 PM

--  
自己回复一下:
怀疑是我的try catch 用得不对,网上学了一下,发现一个问题,一篇文章说:
      程序接受到throw语句后就会自动调用析构器,把该域(try后的括号内)对象clean up,然后再进入catch语句(如果在循环体中就退出循环)。这种机制会引起一些致命的错误,比如,当“类”有指针成员变量时(又是指针!),在 “类的构建器”中的throw语句引起的退出,会导致这个指针所指向的对象没有被析构。

我上面的代码pDoc是在try块外面建立的,不知道有没有这方面的问题,我先是将pDoc放在try里面,但是这样的话try后面的代码就引用不到它了,不知道应该怎样......

另外还发现一个现象,我胡乱改load中的文件名,居然都显示成功......是什么低级错误呢?


W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
31.250ms