C++与 .Net
捕获C++的.dll抛出的异常
C#调用C++动态库如下,静态加载方式
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。[DllImport("FirmClient.dll", CallingConvention = CallingConvention.Winapi)] public extern static void Disp_Destroy(string inStr);
生产上遇到手机银行验签,调用C++封装的dll,若抛出的异常未捕获,会导致应用程序直接崩掉退出。
抛出 AccessViolationException 异常,提示: 由于未经处理的异常,进程终止。
原因:.Net4.0中,C#默认只处理 SEH 的异常,不处理 CSE 的异常。
解决方法:属性标识
[HandleProcessCorruptedStateExceptions] [SecurityCritical] public void CheckCppDllException() { try { } catch(AccessViolationException avex) { ..loginfo } catch(Exception ex) { ..loginfo } }
关于 AccessViolationException
当尝试读或写受保护的内存时会引发,向上冒泡到托管代码的非托管代码中的访问冲突总是包装在 AccessViolationException 中。
关于C#调用C++的问题总结,参见:https://www.cnblogs.com/neverstop/p/5901652.html

更多精彩