2010-08-31 91 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