gpt4 book ai didi

c# - 在非托管回调委托(delegate)中抛出异常的含义

转载 作者:太空狗 更新时间:2023-10-29 23:02:06 25 4
gpt4 key购买 nike

在非托管回调期间使用的委托(delegate)内部抛出异常有什么影响或未察觉的后果?这是我的情况:

非托管 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);
}

最佳答案

native 代码将轰炸未处理的异常,程序终止。

如果你真的想处理那个异常,那么你需要使用自定义 __try/__catch keywords在 native 代码中。这是非常无用的,托管异常的所有细节都丢失了。唯一的区别特征是异常代码 0xe0434f4d。由于您无法确切知道出了什么问题,因此您也无法可靠地恢复程序状态。最好不要捕获它。或者最好不要扔掉它。

关于c# - 在非托管回调委托(delegate)中抛出异常的含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8315592/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com