2012-12-13 31 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

相關問題