to softdog:<br> 我试过了,确实有这个问题。是因为exe 和 dll 之间相互传递了 long string 的缘故。<br>exe 和 dll 使用了不同的 MemoryManager 导致这个问题。解决的办法是使用 Sharemem<br>单元和 shareMM.dll。<br>1、在你的 exe 的 project 单元中加上对 sharemem 单元的引用,如:<br>program test;<br><br>uses<br> Sharemem, //加上 sharemem,并且必须作为在第一个引用单元。放在最前面。<br> Forms,<br> Unit1 in 'Unit1.pas' {Form1};<br>{$R *.RES}<br>begin<br> Application.Initialize;<br> Application.CreateForm(TForm1, Form1);<br> Application.Run;<br>end;<br>2、同样地,你的 Dll 的 Project 单元中也要加上对 sharemem 单元的引用,如:<br><br>Library ShowDll;<br>uses<br> Sharemem, //加上 sharemem,并且必须作为在第一个引用单元。放在最前面。<br> SysUtils,<br> Classes,<br> DataForm in 'Unit1.pas' {DataForm};<br>export ShowDataForm;<br>{$R *.RES}<br>begin<br><br>end; <br>3、发布以上 exe 和 dll 文件时必须同时发布 shareMM.dll 这个 dLL(Delphi 安装自带的)。<br>这样就行了。其实在 Wizard 生成的 Dll Project 单元中自动添加的注释中对这个要注意<br>的地方也作了说明。