C++ 与 .Net
捕获C++的.dll抛出的异常
C#调用C++动态库如下,静态加载方式
1 2 | [DllImport( "FirmClient.dll" , CallingConvention = CallingConvention.Winapi)] public extern static void Disp_Destroy( string inStr); |
生产上遇到手机银行验签,调用C++封装的dll,若抛出的异常未捕获,会导致应用程序直接崩掉退出。
抛出 AccessViolationException 异常,提示: 由于未经处理的异常,进程终止。
原因:.Net4.0中,C#默认只处理 SEH 的异常,不处理 CSE 的异常。
解决方法:属性标识
1 2 3 4 5 6 7 | [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
关于 Marshal.PtrToStringAnsi 中文乱码
1 2 3 | byte [] bytes = System.Text.Encoding.Unicode.GetBytes( Marshal.PtrToStringUni(audioOutput.psz_description)); //先转成UNICODE编码 string dec = System.Text.Encoding.UTF8.GetString(bytes); //再转成UTF8 |
具体参见:https://www.cnblogs.com/wangjinming/p/7845307.html
---
纵使山重水复,亦会柳暗花明
sunqh1991@163.com
欢迎关注,互相交流
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
· 用 DeepSeek 给对象做个网站,她一定感动坏了
· DeepSeek+PageAssist实现本地大模型联网
· 手把手教你更优雅的享受 DeepSeek
· 腾讯元宝接入 DeepSeek R1 模型,支持深度思考 + 联网搜索,好用不卡机!
· 从 14 秒到 1 秒:MySQL DDL 性能优化实战