1

我使用 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() 中生成异常以停止方法执行并显示任何错误消息似乎是合乎逻辑的。但是,这里的问题是C++异常必须由JavaScript处理,我不知道如何实现它。那么:有没有什么方法可以在 C++ 代码中抛出异常,让 JavaScript 可以用它的 try-catch 语句来处理它? PS 我知道有一些方法可以避免这个问题,例如,可以从 Save 方法返回错误代码而不是抛出异常并在成功时返回 0 等;但是,至少对我来说,异常是报告错误的更舒适和直观的方式,所以如果有人知道解决方案,请写下你的想法。

4

1 回答 1

0

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

如果要提供扩展信息,例如消息,可以在实现/接口ISupportErrorInfo的 C++ 类上实现接口,并返回错误信息,如 MSDN 上的此主题:返回错误信息IDispatchIDispatchEx

于 2012-12-13T14:10:57.233 回答