vc制作的动态库。其中的某个函数返回值是unsigned char数组。在delphi中应该怎样对应呢?

解决方案 »

  1.   

    我是这样做的
    type
    TArrbyte = array[0..5] of byte;//定义一个数组类型
    //将它的返回类型设为这个数组
    function find_huhao(address:longword):TArrbyte;cdecl; far; external '.\apijx1.dll';
    但取值的时候,只能取得第一个值。不知为何?
      

  2.   

    有谁帮忙啊
    vc函数的代码
    unsigned char find_huhao(unsigned char address)//,unsigned int dat);//{80}
    {
    //05 address 80 CRCH CRCL//
    unsigned char buf[20];
    unsigned int buf_crc;

    //for(i=0;i<dat;i++)buf[i]=sendbuf[i];
    buf[0]=0x05;
    buf[1]=address;
    buf[2]=0x80;

    buf_crc=crc_data(buf,3);
    buf[3]=(unsigned char)((buf_crc>>8)&0x00ff); 
    buf[4]=(unsigned char)(buf_crc&0x00ff);

    return(*buf);

      

  3.   

    这个C语言函数返回的是char 不是 char*啊
      

  4.   

    感谢zhaoyu_me()。
    不过“返回的是char?不是char*”什么意思,返回的是个unsigned char指针吧?
    我在delphi中这样调用
    定义:function find_huhao(address:longword):PCHAR;cdecl; far; external '.\aKK.dll';
    调用:
    var
    results:PCHAR;
    a : array of byte;
    begin
    results:=find_huhao(1);
    a:=@results;
    然后得到的a是个4587531长的数组?怎么回事,不过第一个值是对的。我是极品菜鸟,不要骂我。
      

  5.   

    我的意思是说如果C语言函数要返回一个字符数组那就应该返回一个字符数组的首地址,就是unsigned char *,而你上面的函数返回的是一个unsigned char,(*buf)也就是buf数组的第一个元素,所以得到的第一个值是对的
      

  6.   

    其实我比较喜欢这样:
    VC:
    void __stdcall ForDelphi(unsigned char *Result,int size)
    {
    int i;
    for (i=0;i<size-1;i++)
    {
    Result[i]='A'+i;
    }
    Result[size-1]='\0';
    }
    Delphi:
    procedure ForDelphi(var Result:Char;size:Integer);stdcall;external 'delphitest.dll';
    procedure TForm1.Button1Click(Sender: TObject);
    var
      tmpstr:array [0..26] of Char;
    begin
      tmpstr[0]:='A';
      ForDelphi(tmpstr[0],27);
      ShowMessage(tmpstr);
    end;
      

  7.   

    我也是刚学C语言,感觉这个C语言函数有点问题,返回的是(*buf)也就是buf数组的第一个元素,而unsigned char buf[20];在C语言函数执行完后自动释放掉了,传到delphi中的那个第一个字符的地址也不是buf的首地址,呵呵,不知道这样分析对不对
      

  8.   

    嗯,好像是这么回事。谢谢zhaoyu_me()  ,rodgerkong(Rodger)。可惜俺的分少,不然每人给你们100分。呵呵