最近做一个软件,要求自己编写dll文件并调用,在返回string变量时一直错误。在摸索之下,发现在debug模式下返回值正常,而在release之下程序会崩溃,并报错堆栈溢出。调试下,发现是string变量出了问题。
于是,百度,查阅资料,将运行库修改为MD,生成的dll文件在release下使用正常。
在调试模式下,使用调试运行库:多线程调试(/MTd)、多线程调试DLL(/MDd)
在发布模式下,使用发布运行库:多线程(/MT)、多线程DLL(/MD)
另外,STL使用模板生成,当我们使用模板的时候,每一个EXE,和DLL都在编译器产生了自己的代码,导致模板所使用的静态成员不同步,所以出现数据传递的各种问题。
所以,尽量不要直接从dll中输出stl对象。以及全部使用release库或debug库,否则两个执行单元扩展出来的STL类的内存布局就可能会不一样。