2010-08-31 68 views
1

我使用C#中使用以下語法消耗C庫:在C#中捕捉從C庫退出(#)

[DllImport("clib.so") static extern int func(char* foo);

我想知道是否有任何的方式來捕捉退出(#)發生在C代碼中,所以如果發生嚴重錯誤,我可以重新加載庫。

謝謝!

回答

3

我相信exit()會終止進程而不會重新輸入托管代碼。可能您可以註冊一個函數,以便在發生這種情況時通過事先通過P/Invoke調用atexit()來通知您。但是如果你從這裏返回,這個過程仍然會退出。我想不返回會使進程處於不確定狀態。您可能需要實施某種形式的進程隔離並監視瀕死庫的進程退出。

http://msdn.microsoft.com/en-us/library/6wdz5232.aspx

+2

+1對於「瀕死」和合理的解決方案 – StingyJack 2010-08-31 14:27:43