各位好,我想用java编写一个关于IC卡操作的程序,需要用到Winscard.dll,使用jna调用SCardTransmit,在MSDN中的声明如下:
LONG SCardTransmit(
  __in          SCARDHANDLE hCard,
  __in          LPCSCARD_IO_REQUEST pioSendPci,
  __in          LPCBYTE pbSendBuffer,
  __in          DWORD cbSendLength,
  __in_out      LPSCARD_IO_REQUEST pioRecvPci,
  __out         LPBYTE pbRecvBuffer,
  __in_out      LPDWORD pcbRecvLength
);
其中__out         LPBYTE pbRecvBuffer,这个参数我一直搞不定。查看帮助typedef BYTE far *LPBYTE;也就是说LPBYTE是一个BYTE*,我查看了JNA的文档,里面有个例子:
int getString(char* buffer, int bufsize);说是:The appropriate argument type would be either byte[], Memory, or an NIO Buffer,用byte[],Memory和Buffer都可以,但是这里的例子是char*不是byte*。
我自己试验的时候我使用ByteByReference,byte[],Memory,PointerByReference,等类型都不能正确的到返回结果。我确信函数已经执行成功,因为pcbRecvLength我可以获得正确的返回长度。
请教大家这个byte*类型用jna调用对应什么类型的参数啊?