c头文件定义:
extern "C" 
{
__declspec( dllexport ) char *  APIENTRY CardRW(char* cardType, char* userNo, 
char* unitNo, char* password, 
char* addMinute,char* SaleCount, 
char* total, char* thisAmount, char* note);
}delphi定义: tCardRW = function(cardType: pchar; userNo: pchar; unitNo: pchar; password: pchar;
    addMinute: pchar; SaleCount: pchar; total: pchar; thisAmount: pchar; note: pchar): pchar; stdcall;可以调用,但是
 tCardRW = function(var cardType: pchar; var userNo: pchar; var unitNo: pchar;  var password: pchar;
    var addMinute: pchar; var SaleCount: pchar; var total: pchar; var thisAmount: pchar; var note: pchar): pchar; stdcall;
确出错,为什么?我要求是可以回写参数的,
和dll里面的处理有什么关系吗?

解决方案 »

  1.   

    用了var就不能用pchar了,用char型。
    跟dll里面的处理没关系
      

  2.   

    那么 pchar 可以回写吗?  去掉var 调用另外一个厂家的dll又出错,到底怎么回事啊
      

  3.   

    PChar当然可以写回了,PChar不是字符串,是字符数组的指针.
      

  4.   

    madyak(无天) ( ) 不对吧,我在delphi里面坐了个测试,procedure TFormICcard.Button2Click(Sender: TObject);
    var pp:pchar;
    begin
       pp:='02';
       test(pp);
       showmessage(pp);
    end;function test(var p:pchar):string;
    begin
      showmessage(p);
      p:='s';
      result:='0';
    end;
    把var关键字去掉 pp的值还是不变啊
      

  5.   

    你所谓的回写数据就是这样直接给指针赋值吗?这是典型的反面教材!
    应该用strcpy类似的函数呀
      

  6.   

    俺也做了个测试怎么就可以呢?
    function test(p: PChar): string;begin
      ShowMessage(p);
      StrCopy(P, 's');
      Result := '0';
    end;procedure TFormICcard.Button2Click(Sender: TObject);
    var
      pp: PChar;
    begin
      GetMem(PP, 20);
      // pp:='02';
      StrCopy(PP, '02');
      test(pp);
      ShowMessage(pp);
    end;