各位好,我想用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调用对应什么类型的参数啊?
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调用对应什么类型的参数啊?
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货