在非托管回调期间使用的委托内部引发异常会产生哪些影响或不可察觉的后果?这是我的情况:
非托管 C:
int return_callback_val(int (*callback)(void))
{
return callback();
}
托管 C#:
[DllImport("MyDll.dll")]
static extern int return_callback_val(IntPtr callback);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
delegate int CallbackDelegate();
int Callback()
{
throw new Exception();
}
void Main()
{
CallbackDelegate delegate = new CallbackDelegate(Callback);
IntPtr callback = Marshal.GetFunctionPointerForDelegate(delegate);
int returnedVal = return_callback_val(callback);
}
本机代码将轰炸未处理的异常,然后程序终止。
如果您确实想处理该异常,那么您需要使用自定义__try/__catch关键词 http://msdn.microsoft.com/en-us/library/windows/desktop/ms680144%28v=vs.85%29.aspx在本机代码中。这是毫无用处的,托管异常的所有详细信息都会丢失。唯一的区别特征是异常代码 0xe0434f4d。由于您无法确切知道出了什么问题,因此也无法可靠地恢复程序状态。最好不要抓住它。或者最好不要扔掉。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)