关于`.Net Core`捕捉`C/C++`中的异常

发布时间 2023-12-18 13:50:55作者: 不正游侠

结论

开门见山的说,.Net Core 无法捕捉在C/C++编写的Dll中的方法的异常和错误。

说明

.Net Framework框架期间,可以通过为方法增加特性:HandleProcessCorruptedStateExceptionsAttribute,或者使用RuntimeWrapperException捕捉运行时的错误,
但是在.Net Core框架中,上述特性已经不再生效了,即使它的状态是弃用状态而不是删除掉。
事实上,没有删除它的原因仅仅只是为了.Net Core.Net Framework的兼容性保留。
但是这个特性已经不生效了。

因此,RuntimeWrapperException也失去了捕捉从C/C++中抛出的运行时异常和错误的能力。

解法

一个合理且规范的解决方案是,不要再考虑通过异常来连接C#和C,而是通过方法的返回值来实现。

比如返回1是正常,2是错误,以此类推。

这势必会增加在C/C++中的代码量,但,总比AspNetCore服务直接崩溃来的划算。

当然,通常遇到的情况是,你所使用的C++包是第三方的,那我只能说,寄。