例如
在DLL中有一下函数:
(1)
function GetValue(aa:string);stdcall;
begin
end;
这种要加sharemem吗
(2)
function GetValue(var aa:string);
begin
end;
这种要加吗看了一下DLL最顶上的注释,好像只有在输出的变量为string时才要加sharemem啊

解决方案 »

  1.   

    最好用PChar,有时候String会出现问题。
      

  2.   

    不用string就行了,再说加上也不多就加吧。
      

  3.   

    delphi有自己的string管理机制,默认的application不需要加。
    但是在dll与application之间,很有可能你application里的一个string内存在dll中被释放了,那么再到application去的时候,就会报错。
    所以必须加sharemem协调string管理机制!
      

  4.   

    那么我在DLL内使用string,但是不是当作参数传出,要不要加sharemem呢
      

  5.   

    如果你实在不想加,可以考虑使用BPL代替DLL,前提是bpl只被delphi或C++builder调用
      

  6.   

    要加。
    强烈建议楼主改成:
    function GetValue(aa:PChar);
    begin
      ShowMessage(string(aa));
    end;
    调用时:
    function DoDll;
    var
      p : Pchar;
    begin
      p := 'Helllo';//或用StrAlloc方法为pchar类型分配空间,或者用字符数组
      GetValue(p);
    end;
      

  7.   

    在DLL内使用String不需要加。但是在DLL的导出函数中不管是参数或者是返回值要用到String的话都需要加。
    不想用SHareMM的话就用PChar代替吧。
      

  8.   

    为什么不加呢?SHAREMEM可能增加你的程序与系统之间的兼容性