2012-12-13 25 views
1

我使用WebBrowser控件和MFC HTML对话框打造便携式C++应用程序接口。我使用window.external(实际上是我的对话框类)为浏览器内部的JavaScript代码公开C++功能。因此,例如,当用户想保存设置,他点击保存按钮,在这种情况下我打电话的window.external是这样的:如何在MFC中实现的WebBrowser控件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 ::保存()内产生的异常停止方法执行,并显示任何错误消息。但是,这里的问题是C++异常必须由JavaScript处理,我不知道如何实现它。 所以:有没有什么办法抛出异常的C++代码以这样的方式,JavaScript就可以用它的try-catch语句处理呢? P. S.我的理解是有办法避免这种问题,例如,它可以从保存方法返回而不是抛出异常的错误代码和成功,等返回0;然而,例外情况要更直观,至少对我来说是至关重要的,所以如果有人知道解决方案,请写下你的想法。

回答

0

在C++代码,通过返回HRESULT值表示失败(负的)指示错误。那些人已经被转换为脚本例外(Error Object)。

如果要提供扩展的信息,如消息,你可以实现你的C++类,它实现IDispatch/IDispatchEx接口ISupportErrorInfo接口,并作为MSDN此主题中描述的返回错误信息:Returning Error Information

相关问题