2014-01-29 65 views
0

我目前正在與ffmpeg的一個專有的包裝,我需要趕在轉碼程序等,有時會出現本地代碼異常捕獲本地代碼例外.NET

我已經看過這些問題/回答:

https://stackoverflow.com/questions/10517199/cant-catch-native-exception-in-managed-code https://stackoverflow.com/questions/150544/can-you-catch-a-native-exception-in-c-sharp-code

然而,他們並不是真正有用的一個功能,我稱之爲期間發生的異常,而是在一個完全不同的線程在FFmpeg庫運行並排側和額外被掀翻組件s如DirectX。這是一個真正的問題,因爲例外會破壞我的整個應用程序!

任何幫助真的很感激。

+0

這不能直接完成。 在本機代碼中處理異常,並在發生異常時從本機代碼返回適當的數據。在託管代碼中,您可以通過檢查返回的值/數據來知道是否發生任何異常。 – Narendra

+0

@Narendra可能在DirectX中發生異常,正如我在問題中提到的那樣,這是一個專有組件。我無法改變任何處理異常的方法。 – Acrotygma

回答

0

你能趕上使用這些事件2從其他線程拋出的異常:

System.Windows.Forms.Application.ThreadException += Application_ThreadException; 
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; 
// Set the unhandled exception mode to force all Windows Forms errors to go through our handler. 
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException); 

您可能還需要設置你的App.config文件如下:

<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0"> 
    <runtime> 
    <legacyUnhandledExceptionPolicy enabled="1" /> 
    </runtime> 
... 

如果你可以」使用託管代碼工作,下面的代碼將捕捉本地(C++)代碼中的所有內容(不確定是否可以PInvoke):

//Sets the handler for a pure virtual function call. 
_set_purecall_handler(&MyPureVirtualCallHandler); 

// Sets the handler function to be called when invalid parameters are passed to C runtime functions 
_set_invalid_parameter_handler(&MyInvalidParameterHandler); 

//Register an unhandled exception filter 
SetUnhandledExceptionFilter(&UnhandExceptionFilter);