现在有一个动态库的函数是:int GetUserRight(int Address,BYTE *pCheckCardID,BYTE *pReturnCardID,BYTE *pPassword,Word *pSegmentID,Word *pAPB);
在delphi中用到这个函数:RTN:=GetUserRigh(1,CardNO,pReturnCardID,pPassword,SegmentID,APB);
CardNO是一个编辑框中的值,是string类型的,所以编译的时候它会报错:[Error] RegCard.pas(99): Incompatible types: 'String' and 'PAnsiChar',请问该怎样解决?还有就是pReturnCardID,pPassword,SegmentID,APB这些变量该怎样根据动态库的函数进行限定啊?谢谢!!!

解决方案 »

  1.   

    谢谢你的回答,但是那些变量该怎样定义呢?pReturnCardID,pPassword:pchar吗?SegmentID,APB:pword会报错:[Error] RegCard.pas(99): Incompatible types: 'Windows.Word' and 'System.Word'该怎样解决啊?
      

  2.   

    要先看看 GetUserRight 的文档说明。--
    http://www.agui.googlepages.com
    mailto: agui.cn(a)gmail.com
      

  3.   

    C/C++:
    int GetUserRight(int Address,BYTE *pCheckCardID,BYTE *pReturnCardID,BYTE *pPassword,Word *pSegmentID,Word *pAPB);Delphi:
    type
      PByte=^byte;
      PWord=^Word;function GetUserRight(Address:integer;pCheckCardID:PByte;pReturnCardID:pByte;pPassword:pByte;pSegmentID:PWord,pAPB:PWord):integer;
      

  4.   

    调用:function GetUserRight(Address:integer;pCheckCardID:PByte;pReturnCardID:pByte;pPassword:pByte;pSegmentID:PWord;pAPB:PWord):integer;stdcall;external 'YourDllName.dll';
     var
    Address:integer;
    pCheckCardID:PByte;
    pReturnCardID:pByte;
    pPassword:pByte;
    pSegmentID:PWord;
    pAPB:PWord;try
      address=1;
      new(pCheckCardID);//--分配指针内存
      pCheckCardID^:=strtoint(edtCheckCardID.text);
      new(pReturnCardID);
      pReturnCardID^=0;
      new(pPassword);
      pPassword^=0;//or init.....
      new(pSegmentID);
      pSegmentID^:=0;
      new(pAPB);
      pAPB^:=0;
      
      GetUserRight(Address,pCheckCardID,pReturnCardID,pPassword,pSegmentID,pAPB);
      
    finally
      dispose(pCheckCardID);//---收回指分配的内存
    dispose(pReturnCardID);
    dispose(pPassword);
    dispose(pSegmentID);
    dispose(pAPB);
    end;当然,还有其他的实现方法。我就不写了。
      

  5.   

    我的意思是各个参数的意思,比如是不是一定长的数组,还是纯粹的一个指针。--
    http://www.agui.googlepages.com
    mailto: agui.cn(a)gmail.com