zoukankan      html  css  js  c++  java
  • 关于Dll中导出string的问题

    问题描述: 

      最近遇到一个问题,编写了一个Dll,然后在exe程序中调用该Dll,代码如下:

      该代码在Test的构造函数中给strError 赋值,当该串的长度小于等于15时(例如:strError = "123456789012345";)程序运行正常;当该串的长度超过15时(例如:strError = "1234567890123456";)时,

    程序运行时会崩溃,出错画面如下:

    出错画面

    原因分析:

       该问题主要是由于在Dll中导出STL造成的,因为DLL和EXE的内存分配方式不同,DLL中的分配的内存不能在EXE中正确释放掉。

    解决办法:

      1. 设置Dll和exe程序的运行时库,下面是验证过的可以正确运行的组合方式

           DLL          EXE

           /MDd        /MDd

           /MD          /MDd

           /MD          /MD

           /MDd        /MD

      2. 将Dll中Test类导出函数GetError()返回值由string改成char*,如上面代码中注释部分

    建议:

       在DLL中尽量不要在导出接口中使用string作为输出和输入参数,而改用char*代替

    参考:

       关于该问题的描述可以参考如下几篇文章:

       http://blog.csdn.net/ytfrdfiw/archive/2008/01/17/2048605.aspx

       http://topic.csdn.net/t/20050305/22/3827606.html

       http://topic.csdn.net/u/20080515/10/BA1CD6B0-FDAE-4898-892C-63E5AC829381.html

      

  • 相关阅读:
    Redis分布式锁的正确加锁与解锁方式
    高并发系统中的限流算法
    谈谈 InnoDB引擎中的一些索引策略
    面试必问:手写一个内存泄漏的程序
    空指针异常与Optional类
    Redis的内存淘汰策略
    explain的关键字段的意义
    pycharm编辑器简单配置-- 持续更新完善
    vscode 插件-better comments-代码注释高亮
    阿里前端开发规范-转载
  • 原文地址:https://www.cnblogs.com/zhangyunlin/p/6167946.html
Copyright © 2011-2022 走看看