100分求分析DocumentComplete崩溃错误

xharry 2007-06-18 12:31:30
我的一个CWebBrowser2控件
在DocumentComplete中,把html的内容动态的追加‘hello,world’在后面
但偶尔会程序崩溃,提示mshtml.dll出错。下面是代码,请熟悉com的朋友
帮我看看,哪里有指针或者资源方面的错误。

谢谢。


void CMyDemo::DocumentCompleteExplorer1(LPDISPATCH pDisp, VARIANT* URL)
{
if (pDisp == NULL) return;
if (URL->bstrVal == NULL) return;

CString strUrl = (CString)(*URL);
if (strUrl.Find(_T("http:")) < 0) return;


try
{
HRESULT hr;

// get IWebBrowser2
IWebBrowser2 * pWebBrowser = NULL;
hr = pDisp->QueryInterface(IID_IWebBrowser2,
(void **)&pWebBrowser);
if (FAILED(hr)) return;
if (pWebBrowser == NULL) return;

// get document
CComPtr<IDispatch> spDispDoc;
hr = pWebBrowser->get_Document(&spDispDoc);
if (FAILED(hr)) return;
if (spDispDoc == NULL) return;

CComPtr<IHTMLDocument2> spHTMLDoc;
hr = spDispDoc->QueryInterface(IID_IHTMLDocument2,(void**)&spHTMLDoc);
if (FAILED(hr)) return;
if (spHTMLDoc == NULL) return;

IHTMLDocument2* document = NULL;
document = spHTMLDoc;

CComPtr<IHTMLElement> body;
IHTMLElement *parent;

// get the body object
hr = document->get_body(&body);
if (FAILED(hr)) return;

// 通过body,取得html
hr = body->get_parentElement(&parent);
if (FAILED(hr)) return;
if (parent == NULL) return;

// get html
BSTR bstr;
CString str;
hr = parent->get_outerHTML(&bstr);
if (FAILED(hr)) return;
// body->get_outerHTML(&bstr);
str = bstr;

SAFEARRAY *safe_array = SafeArrayCreateVector(VT_VARIANT, 0, 1);
if (safe_array == NULL) return;

VARIANT *variant = NULL;
hr = SafeArrayAccessData(safe_array,(LPVOID *)&variant);
if (FAILED(hr))
return;
variant->vt = VT_BSTR;

// 追加 hello,world
str += _T("hello, world");
variant->bstrVal = CString(str).AllocSysString();

// write SAFEARRAY to browser document
document->write(safe_array);
document->close();

SafeArrayUnaccessData(safe_array);

// release
parent->Release();
pWebBrowser->Release();


}catch(...)
{
// NOOP
}

}
...全文
282 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
xharry 2007-06-21
  • 打赏
  • 举报
回复
最后UP一次
eduyu 2007-06-19
  • 打赏
  • 举报
回复
这样操作太费劲,容易出错。
用IHTMLWindow2::execScript 快速,安全。
xharry 2007-06-19
  • 打赏
  • 举报
回复
顶一下
xharry 2007-06-18
  • 打赏
  • 举报
回复
我已经按JiangSheng所说,将漏掉的那个也加上了,再测测

难道大家使用CWebBrowser2控件,就没有遇到过mshtml.dll错误??

abomber2 2007-06-18
  • 打赏
  • 举报
回复
是的 智能指针 不能用->Release()

直接用.Release()

否则会Release两次
xharry 2007-06-18
  • 打赏
  • 举报
回复
少了个document->Release();
不Release可能导致程序Crash?

CComPtr<IDispatch> spDispDoc; CComPtr是智能指针,这里应该不需要Release();


------------

添加网页元素问题:我只想在原来的网页代码的最后追加一段html代码,insertBefore是加在前面,我用document.write是不是也没有错误?好像document.write会保证javascript的执行,我追加的是JavaScript

蒋晟 2007-06-18
  • 打赏
  • 举报
回复
return之前要Release所有获得的COM接口指针
添加网页元素用IHTMLDocument2::createElement和IHTMLDOMNode::insertBefore /IHTMLDOMNode::appendChild
redpetallsg 2007-06-18
  • 打赏
  • 举报
回复
不懂,帮你顶一下。
内容概要:本文围绕“基于分布式模型预测控制的多个固定翼无人机一致性控制”展开,利用Matlab代码实现相关算法的仿真,旨在通过分布式控制策略实现多架固定翼无人机在复杂动态环境中的协同飞行与一致性控制。研究结合模型预测控制(MPC)方法,构建适用于多无人机系统的分布式优化框架,重点解决了通信受限、信息延迟及无中心化指挥条件下的协同稳定性问题。内容涵盖固定翼无人机的动力学建模、分布式MPC优化求解机制、一致性协议设计、通信拓扑结构分析以及仿真验证全过程,确保多机系统在保持队形一致的同时完成协同任务。; 适合人群:具备自动控制理论、无人机系统建模或多智能体协同控制基础,从事智能无人系统、集群控制、自动化与机器人等领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于多无人机协同编队飞行、集群侦察、分布式任务执行等实际工程场景;②为分布式MPC算法在多智能体系统中的一致性控制提供可复现的Matlab仿真案例,推动先进控制理论向工程实践转化;③服务于科研论文复现、算法验证、控制系统课程设计与毕业课题参考。; 阅读建议:建议读者结合文中提供的Matlab代码逐模块运行与调试,重点关注分布式MPC在不同通信拓扑下对一致性收敛性能的影响,并可通过调整预测时域、权重矩阵与噪声参数等方式深化对算法鲁棒性与适应性的理解。

16,550

社区成员

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

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

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