String类型是Borland自定的特殊类型,使用起来真是无比方便,
但是,它需要borladmm.dll的支持,在动态链接库中想使用STRING类型
要经过特殊的手段,因此还是使用PCHAR类型吧。PCHAR也挺方便的,如果你确实一定要用String类型的话,就在DLL,Exe的工程文件中第一个Uses中的第一位置加入 ShareMem.

解决方案 »

  1.   

    在uses中加入了sharemem,在运行的时候还是需要borlandmm.dll吧?
    上面那段程序如果放到dll中需要做一些怎么样的修改呢?
      

  2.   

    在调用Dll文件的你的主exe 的工程文件和被调用的Dll工程文件都要首先引用 Sharemm 这个单元,因为有 string 类型的变量在两者之间传递。
      

  3.   

    OK,我试试
    还有就是你能否帮我把上面那段程序改成PChar类型的呢?
    我很菜,谢谢你先
      

  4.   

    用ARRAY[0。。] OF CHAR来代替吧
      

  5.   

    outer2000
    能不能写出改过的代码呢?谢谢
      

  6.   

    function proc1(s1,s2: pchar): pchar;
    var
      tmp1:string;
      len1,len2,i,j:Integer;
    begin
      len1:=Length(s1);
      len2:=Length(s2);
      SetLength(tmp1,len1);
      j:=1;
      for i:=1 to len1 do
      begin
        tmp1[i] := Chr(Ord(s1[i-1])+Ord(s2[j-1]));
        Inc(j) ;
        if j = len2+1 then j := 1 ;
      end;
      Result := pchar(tmp1) ;
    end;
      

  7.   

    你试试看,在dll中是可以用的。
    只要不出现在调用中就是可以的了,在程序内部出现都是没有关系的。
    不然string也就没有存在的意义了,你说呢?
      

  8.   

    不可能吧,老兄。我做怎么可以啊。
    我是做完了才贴上来的呀!你在dll中是不是这样写的?
    function proc1(s1,s2: pchar): pchar; stdcall;
    var
      tmp1:string;
      len1,len2,i,j:Integer;
    begin
      len1:=Length(s1);
      len2:=Length(s2);
      SetLength(tmp1,len1);
      j:=1;
      for i:=1 to len1 do
      begin
        tmp1[i] := Chr(Ord(s1[i-1])+Ord(s2[j-1]));
        Inc(j) ;
        if j = len2+1 then j := 1 ;
      end;
      Result := pchar(tmp1) ;
    end;exports
      proc1;引用的单元中是不是这样写的?
    function proc1(s1,s2: pchar): pchar;stdcall;implementation{$R *.DFM}function proc1; external 'project1.dll' name 'proc1';