原型:
LONG SCardTransmit(
  IN SCARDHANDLE hCard, 
  IN LPCSCARD_I0_REQUEST pioSendPci, 
  IN LPCBYTE pbSendBuffer, 
  IN DWORD cbSendLength, 
  IN OUT LPSCARD_IO_REQUEST pioRecvPci, 
  OUT LPBYTE pbRecvBuffer, 
  IN OUT LPDWORD pcbRecvLength 
);VB声明:
Public Declare Function SCardTransmit Lib "winscard.dll" (ByVal hCard As Long, ByRef pioSendPci As SCARD_IO_REQUEST, ByRef pbSendBuffer As Byte, ByVal cbSendLength As Long, ByRef pioRecvPci As SCARD_IO_REQUEST, ByRef pbRecvBuffer As Byte, ByRef pcbRecvLength As Long) As Long

解决方案 »

  1.   

    关键是LONG SCardTransmit(
      IN SCARDHANDLE hCard, 
      IN LPCSCARD_I0_REQUEST pioSendPci, 
      IN LPCBYTE pbSendBuffer,                \\这里
      IN DWORD cbSendLength, 
      IN OUT LPSCARD_IO_REQUEST pioRecvPci, 
      OUT LPBYTE pbRecvBuffer,                \\这里
      IN OUT LPDWORD pcbRecvLength 
    );
      

  2.   

    function SCardTransmit(
      hCard: Integer;
      var pioSendPci: SCARD_IO_REQUEST; var pbSendBuffer; cbSendLength: Cardinal;
      var pioRecvPci: SCARD_IO_REQUEST; var pbRecvBuffer; var pcbRecvLength: Cardinal
    ): Integer; stdcall; external 'winscard.dll';
      

  3.   

    这样声明能否在*处传送Byte数组?
    Function SCardTransmit(hCard:Longint;
                           pioSendPci:SCARD_IO_REQUEST;
                           var pbSendBuffer:Byte;             {*}
                           cbSendLength:Longint;
                           var pioRecvPci:SCARD_IO_REQUEST;
                           var pbRecvBuffer:Byte;             {*}
                           var pcbRecvLength:Longint
                           ):Longint;stdcall;external 'winscard.dll';
      

  4.   

    function SCardTransmit(
      hCard: SCARDHANDLE;
      const ioSendPci: SCARD_I0_REQUEST; // 只读的传引用
      pbSendBuffer: PByte; // 传递Byte指针,可用用传递字节数组
      cbSendLength: DWORD; // 传值
      var ioRecvPci: SCARD_IO_REQUEST; // 传引用 in&out
      out pbRecvBuffer: PByte; // 传出的指针
      var cbRecvLength: DWORD // 传引用,事实上,我认为这个应该设计为out,因为pbRecvBuffer是out
    ): Longint;