dll单元
uses
  SysUtils,
  Classes;
function x(s:string):TString;stdcall;
implementation
{$R *.res}
function x(s:string):TString;
var
  TS:TStrings;
begin
  TS:=TStringList.create;
  TS.add('s');
  Result:=TS;
  FreeAndNil(TS);
end;
exports
  x;
begin
end.
这样返回能取到值,但是在FreeLibrary的时候存在内存方问错误的问题

解决方案 »

  1.   

    最后使用OleVariant传递。在Dll内部首先用Variant保存所有要传递的记录,然后转化为OleVariant————————————————————————————————————
    宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
    ————————————————————————————————————
      

  2.   

    你最好不要用这个类
    这个类中有虚方法
    而且跨DLL不能使用含string类型的数据类
    解决的方法有
    不必用VARIANT
    你传送PCHAR指针
    然后再转成string使用就行strpas
      

  3.   

    写DLL库时,返回值和参数最好不要使用Dephi自己的数据类型。
      

  4.   

    试了一个方法,就是定义一个结构定义成Array of Char类型。能实现所要的功能。
    但是我现在想了解一下,如果我要在动态库里面一个接口函数要返回N条String类型的数据。N的条数不确定,大家有什么好的办法?讨论一下,分数不够可以再加。
      

  5.   

    N条要返回的string?
    建议你不要这么做
    DLL和主程序的数据最好独立 
    不要互相使用
    尤其是String类型的数据
    你可以用PCHAR分配内存后公用指针