以下是VB是的代码,请将它转换成Delphi的代码//ReadID函数申明
Private Declare Function ReadID Lib "IC500.dll" (ByRef ID As Byte) As Long
//代码
Private Sub cmdReadId_Click()
Dim lngL As Long
Dim ID(16) As Byte
lngL = ReadID(ID(0))
If lngL <> 0 Then MsgBox "error " + CStr(lngL)
txtReadId = CStr(lngL) + "    "
Dim intLoop As Integer
For intLoop = 0 To 15
'    txtReadId = txtReadId + CStr(AscB(Mid(ID, intLoop, 1))) + " "
txtReadId = txtReadId + CStr(Hex(ID(intLoop))) + " "
NextEnd Sub

解决方案 »

  1.   

    function ReadID ( var ID : Byte):long ; external 'IC500.dll';
    procedure cmdReadId_Click()
    var
    lngL :Long;
    ID: array [0..15] of Byte;
    intLoop: Integer;
    begin
    lngL := ReadID(ID[0])
    If lngL <> 0 Then Showmessage('error ' + IntTOstr(lngL));
    txtReadId := intToStr(lngL) + '    ';For intLoop:= 0 To 15 do
      txtReadId := txtReadId + IntToStr(Hex(ID(intLoop))) + ' '
    End
      

  2.   

    后面应该是
      txtReadId := txtReadId + Format('%x',ID[intLoop])) + ' ';
    End
      

  3.   

    我试过了,好象不行,我把改成这样,好象还是不行,返回的结果和VB的不一样啊
    var
    lngL :LongInt;
    ID: array [0..15] of byte;
    intLoop: Integer;
    begin
    lngL := ReadID(ID[0]);
    If lngL <> 0 Then begin
      Showmessage('error ' + IntTOstr(lngL));
      exit;
    end;
    txtReadId.Text:= intToStr(lngL) + '    ';For intLoop:= 0 To 15 do
      txtReadId.Text := txtReadId.Text + IntToStr(ID[intLoop]) + ' ';
    end;
      

  4.   

    声明:
    function ReadID(pID:PByte):integer;external 'IC500.DLL';var lngL:integer;ID:array[0..15] of byte;sTmp:string;
       intLoop:Integer
    begin
     lngL:=ReadID(@ID[0]);
     if lng<>0 then ShowMessage(Format('Error %d',[lngL]));
     sTmp:='';
     sTmp:=Format('%d      ',[lngL]);//感觉你的代码由问题,readID成功的时候返回值到底是0还是非0?
     for intLoop:=0 to 15 do
       sTmp:=sTmp+IntToHex(ID[intLoop],2)+'  ';
     txtReadID.Text:=sTmp;
    end;