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

之前的程序:

                //定义入参
StringBuilder strin = new StringBuilder();
//定义回应
StringBuilder strout = new StringBuilder();
strin.Append(softPosStrin.CheckOutID.PadRight(, ' '));
strin.Append(softPosStrin.OperatorID.PadRight(, ' '));
strin.Append(softPosStrin.TransType);
strin.Append(softPosStrin.Money.PadLeft(, ''));
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(, ' '));
strin.Append(softPosStrin.OperatorID.PadRight(, ' '));
strin.Append(softPosStrin.TransType);
strin.Append(softPosStrin.Money.PadLeft(, ''));
strin.Append(softPosStrin.PayType);
strin.Append(softPosStrin.ReverseID);
//调用
CreditTrans(strin.ToString(), strout);
StringBuilder指定了大小后,在运行效率上会高很多,这个是一个方面。另外一个方面,当调用Win32的DLL时,如果接口方法的参数中有字符串的输出(LPSTR),就应该使用StringBuilder这个类型,
此时,定义的StringBuilder变量就必须指定大小(为变量初始化内存空间),否则,当DLL内部对变量空间赋值的时候会失败,甚至出现意外,因为外部DLL并不支持StringBuilder这样的数据操作行为

最新文章

  1. java弱引用之WeakHashMap相关资料
  2. Gym - 100917H
  3. CSS3让一段文字多余的用省略号表示,当鼠标移动上去的时候显示全部文字
  4. Keepalive双主搭建配置
  5. transform初学习
  6. git资料图
  7. Makefile目标,伪目标,头文件自动依赖
  8. Openstack的HA解决方案【mysql集群配置】
  9. XP纯净版光盘ISO镜像文件
  10. java web实现读取指定盘符下的图像(二)
  11. 图片文件,图片文件流和BASE64加密字符串之间的转换,以及图片的BASE64加密字符串再jsp上如何显示
  12. 小米2S TWRP 3.0.2-0 最新版Recovery
  13. Kubernetes 认证
  14. YOLT:将YOLO用于卫星图像目标检测
  15. SQA
  16. Linux下tomcat中多项目配置druid报错的问题
  17. pandas处理finance.yahoo股票数据 WTI CL USO OIL
  18. 时间轴QTimeLine
  19. QT入门系列(3):控制台输出QString
  20. JavaScript异步编程__“回调地狱”的一些解决方案

热门文章

  1. STL源码剖析:关联式容器
  2. JAXB XML生成CDATA类型的节点
  3. Java对象公约
  4. 【论文笔记】Self-Supervised GAN :辅助性旋转损失的自监督生成式对抗网络
  5. C#中Session的用法详细介绍
  6. 自定义placeholder样式
  7. Logback配置文件这么写,还愁不会整理日志?
  8. three.js 制作一个三维的推箱子游戏
  9. matplotlib示例
  10. PHP curl_share_init函数