如何在MFC中实现的WebBrowser控件window.external方法中生成异常?

时间:2012-12-13 11:16:58

标签: javascript c++ mfc browser

我使用WebBrowser控件和MFC HTML对话框来构建可移植的C ++应用程序界面。我使用window.external(实际上是我的对话框类)来为浏览器中的JavaScript代码公开C ++功能。因此,例如,当用户想要保存设置时,他单击“保存”按钮,在这种情况下,我调用window.external,如下所示:

<script type="text/javascript">
$("#Save").click(function() {
try
{
   window.external.Save();
}
catch(error)
{
   alert(error);
});
</script>

现在,在HTML对话框中我有这样的方法:

void CMyDialog::Save()
{
   // Do something...
}

如果用户输入了无效设置,则在CMyDialog :: Save()中生成异常以停止方法执行并显示任何错误消息是合乎逻辑的。但是,这里的问题是必须由JavaScript处理C ++异常,而我不知道如何实现它。 所以:有没有办法在C ++代码中抛出异常,以便JavaScript可以使用try-catch语句处理它?<​​/ strong> P. S.我知道有办法避免这个问题,例如,可以从Save方法返回错误代码而不是抛出异常并在成功时返回0等;但是,例外情况要舒适得多。至少为我报告错误的直观方式,所以如果有人知道解决方案,请写下您的想法。

1 个答案:

答案 0 :(得分:0)

在C ++代码中,您通过返回显示失败的HRESULT值(否定值)来指示错误。仅这些就已经转换为脚本异常(Error Object)。

如果要提供扩展信息(例如消息),可以在C ++类上实现ISupportErrorInfo接口,该接口实现IDispatch / IDispatchEx接口,并返回错误信息,如MSDN上的这个主题:Returning Error Information