如果要返回字符串,这个函数应该如何整?调用的时候传啥参数?

解决方案 »

  1.   

    可以返回,不过当你的程序要发布是要加另一个Dll,即borland.dll,而且不能被其他语言调用,所以建议不要。
    返回pChar的好。这个可以通用的
    比如
    exprot
      function out:Pchar;stdcall;
      

  2.   

    看来只有返回pchar类型了?
    比如这个dll中的函数是这样的:
    function test():pchar;
    调用时,
    x:pchar;
    ...
    x := test();
    这样就可以了吗?这个x是否需要初试化处理一下?
      

  3.   

    不用的。其实你X也可以是string的,它会自动转换的,但反过来就不行,
    反过来必须强制转换
      

  4.   

    to楼上:
    x声明为string,其它不变吗?
      

  5.   

    如果把pchar做为test函数的变参,不用返回字符串,那也可以得到这个字符串吧?
    调用时是否需要把要传入的pchar进行StrAlloc(int)?如果不用变参,用返回pchar的方法,那调用时x := test();
    这个x如果定义成pchar类型,需要用StrAlloc(int)手工分配内存,用strDispose()释放内存吗?如果x定义成string类型,x := test()会不会造成内存出问题?
      

  6.   

    test函数中,result := pchar('字符串')和strPcopy(result,pchar('字符串'))那种方法比较安全可靠?
      

  7.   

    写dll的时候建议模仿windows api风格,pchar(char *)到底。
      

  8.   

    pchar和String类型不能直接付值 要强制类型转换
      

  9.   

    我决定用返回pchar类型的值。另有一问题请教一下,传入字符串类型的值没有关系吧?传入的参数比必要pchar类型吧?
      

  10.   

    可以不用你如果要传入字符串变参,可以这样
    string x;
     text(pchar(x));
    强制转换就可以了
      

  11.   

    最好用STRING,在PCHAR和STRING转化时会出问题,有时STRING转为PCHAR时会丢失字符,前面一们老兄说得对,用STRING时要带borland.dll,可能他写错了,应该是borlndmm.dll,我解释一下为什么,因为BORLAND在DLL中处理STRING是用的是BORLAND的内存(STRING是自动内存分配的)管理函数,这些函数全在Borlndmm.dll中,用过的朋友就知道了,还有理重要的一点是,在DELPHI的DLL中如果用了STRING类型,则一定要包含SHAREMEM单元并且要放在USES的第一行,这个是DELPHI的共享内存单元.
    另:本人已开发了一些通用DLL,愿与有兴趣的朋友一起进步
      

  12.   

    dll里面的函数使用string类型的变量应该问题不大吧?
      

  13.   

    我感觉传入pchar返回pchar比较好,证据比较充分了。
    不过dll里面函数是否可以定义string类型的变量,目前证据还不足。
      

  14.   

    function  hhh():PChar;  stdcall external 'data\hhh.dll';procedure Tform_zcm.FormCreate(Sender: TObject);
    begin
     cxTextEdit1.text:=hhh();
    end;
      

  15.   

    函数里面好像可以定义string类型的变量的吧?
      

  16.   

    >>dll里面的函数使用string类型的变量应该问题不大吧?可以。我都是在内部使用string,只不过输入输出的时候才转为 pchar。
      

  17.   

    >>dll里面的函数使用string类型的变量应该问题不大吧?可以。我都是在内部使用string,只不过输入输出的时候才转为 pchar。
      

  18.   

    那在dll内部使用string有没有问题?输出时用pchar!?