c# 引用c++ DLL 闪退


C#用c++ DLL 闪退情况及原因分析

  • 没错,我又来了 上一篇文章刚发完,又遇到了闪退
  • 代码如下
char* (__stdcall * NationEcTrans)(char *strUrl,char *pindata,char *poutdata);
  • 我们都知道按照基本映射关系表 char* 可以用StringBuilder、ref string 、byte[] 数组。而闪退的原因基本上为内存分配原因。最开始我这边没有注意 除了 char *poutdata 之外 其余均用了string。巧合的是测试环境下,回传的字符串字符不多。 .NET 4.0框架下可以使用 更高的框架下直接闪退。 此时我将返回值 改为IntPtr (句柄/指针)发现不再闪退。此时结束了吗? 当然没有 如果结束了就没有这篇文章了,上一篇已经改过了。 我们再次回到内存问题,关键点就在于StringBuilder、string 我们习惯了.NET 默认分配的内存。那内存溢出后 也会闪退。 所以最简单的方法是用byte数组 定义足够大的内存。传入 ref byte[0]。此时问题解决。
  • 说到内存问题 我们都知道有GC机制。但GC回收不是在我们的可控范围内的。对于频繁拍照内存过大 GC来不及的时候也会闪退。此时我们可以利用以下代码 及时回收
 GC.Collect();
 GC.WaitForPendingFinalizers();
  • 这个只是经验之谈,如有不对或者理解更透彻的欢迎交流沟通


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM