zoukankan      html  css  js  c++  java
  • 关于C#调用非托管DLL,报“内存已损坏的”坑,坑,坑

    因客户需求,与第三方对接,调用非托管DLL,之前正常对接的程序,却总是报“内存已损坏的异常”,程序进程直接死掉,折腾到这个点(2018-05-11 00:26),终于尘埃落定,直接上程序。

    之前的程序:

                    //定义入参
                    StringBuilder strin = new StringBuilder();
                    //定义回应
                    StringBuilder strout = new StringBuilder();
                    strin.Append(softPosStrin.CheckOutID.PadRight(10, ' '));
                    strin.Append(softPosStrin.OperatorID.PadRight(10, ' '));
                    strin.Append(softPosStrin.TransType);
                    strin.Append(softPosStrin.Money.PadLeft(12, '0'));
                    strin.Append(softPosStrin.PayType);
                    strin.Append(softPosStrin.ReverseID);
                    //调用
                    CreditTrans(strin.ToString(), strout);    

    优化后的程序:

              //定义入参
                    StringBuilder strin = new StringBuilder(1024);
                    //定义回应
                    StringBuilder strout = new StringBuilder(1024);
                    strin.Append(softPosStrin.CheckOutID.PadRight(10, ' '));
                    strin.Append(softPosStrin.OperatorID.PadRight(10, ' '));
                    strin.Append(softPosStrin.TransType);
                    strin.Append(softPosStrin.Money.PadLeft(12, '0'));
                    strin.Append(softPosStrin.PayType);
                    strin.Append(softPosStrin.ReverseID);
                    //调用
                    CreditTrans(strin.ToString(), strout);   

    StringBuilder指定了大小后,在运行效率上会高很多,这个是一个方面。另外一个方面,当调用Win32的DLL时,如果接口方法的参数中有字符串的输出(LPSTR),就应该使用StringBuilder这个类型,
    此时,定义的StringBuilder变量就必须指定大小(为变量初始化内存空间),否则,当DLL内部对变量空间赋值的时候会失败,甚至出现意外,因为外部DLL并不支持StringBuilder这样的数据操作行为
  • 相关阅读:
    布隆过滤器(Bloom Filter) 未完待续
    [面试]future模式
    R语言入门(2)-数据对象
    R语言入门(1)-初识R语言
    [面试] Java GC (未整理完)
    [面试]StringBuilder StringBuffer源码粘贴(并非源码分析, 请绕道)
    [面试]synchronized
    [面试]volatile类型修饰符/内存屏障/处理器缓存
    [面试]死锁-最简单的死锁demo
    [面试]Actor模型
  • 原文地址:https://www.cnblogs.com/zix1314/p/9022557.html
Copyright © 2011-2022 走看看