function aaa ( A:Pchar,id:integer,B:Pchar,
C:Pchar;No:Double;D:Pchar;E:Pchar;
F:Pchar):integer;stdcall;
返回值
成功:0
      同时对 B,C,NO,D,E赋值
失败:1
我写aaa函数时,怎样对形参B,C,NO,D,E赋值,用户调用aaa函数怎样调用形参的值?

解决方案 »

  1.   

    我写aaa函数时,怎样对形参B,C,NO,D,E赋值,用户调用aaa函数怎样调用形参的值?
      

  2.   

    这种写法有问题。
    如果在DELPHI内部使用,为什么不用STRING类型?
    如果需要和其他程序交互(例如DLL)
    使用PChar要注意内存的分配。
    你看所有的WINDOWS API使用到需要返回的字符串时都要传一个字符串长度的。
    例如:
    int GetWindowText(    HWND hWnd,    LPTSTR lpString,    int nMaxCount  );正确的方法应该这样写:
    function aaa(B:PChar; BMaxLength:integer);
    begin
      B := 'aaa';
      //在这儿为B赋值,注意B的长度不得超过BMaxLength-1
    end;
    调用:
    var
      b:array[0..100] of char;
    begin
      aaa(B, sizeof(B));
    end;建议把你的这么多参数封装到一个record中。
      

  3.   

    function aaa ( A:Pchar,id:integer,B:Pchar,
    C:Pchar;No:Double;D:Pchar;E:Pchar;
    F:Pchar):integer;stdcall;
    返回值
    成功:0
          同时对 B,C,NO,D,E赋值
    失败:1
    这是一个DLL函数,用户调用这个DLL函数时,怎样能把B,C,NO,D,E的值调用出来.
      

  4.   

    建议你这样使用:
    type TParams = record
        B:array [0..255] of char;
        C:array [0..255] of char;
        D:array [0..255] of char;
        E:array [0..255] of char;
        F:array [0..255] of char; //注意要保证字符串的长度够用
        No :double;
      end;
    function aaa(A:PChar; param :TParams);
    begin
    end;
      

  5.   

    形参NO:double,怎么再DLL函数中附值?客户调用怎样取值?
      

  6.   

    刚才有点写错了:
    function aaa(A:PChar; var param :TParams);
    begin
      param.No := 1;
    end;var param :TParams
    aaa('', param);
    params.no;
      

  7.   

    呵呵,同意windindance(风舞轻扬) , 但给调用者文档要比较详细,并且对方要在自己的开发环境中声明类型,不是很方便(如果今后要添加修改参数那使用记录性最佳)