接口是:
4.3.4 SDT_ReadBaseMsg
读取证/卡固定信息。
int SDT_ReadBaseMsg (int iPort,unsigned char * pucCHMsg,unsigned int * puiCHMsgLen,unsigned char * pucPHMsg,unsigned int * puiPHMsgLen,int iIfOpen);
参数说明:
iPort [in] 整数,表示端口号。参见SDT_ResetSAM。
pucCHMsg [out] 无符号字符指针,指向读到的文字信息。
puiCHMsgLen [out] 无符号整型数指针,指向读到的文字信息长度。
pucPHMsg [out] 无符号字符指针,指向读到的照片信息。
puiPHMsgLen [out] 无符号整型数指针,指向读到的照片信息长度。
iIfOpen [in] 整数,0表示不在该函数内部打开和关闭串口,此时确保之前调用了SDT_OpenPort来打开端口,并且在不需要与端口通信时,调用SDT_ClosePort关闭端口;非0表示在API函数内部包含了打开端口和关闭端口函数,之前不需要调用SDT_OpenPort,也不用再调用SDT_ClosePort。
返回值:
0x90 读固定信息成功
其他 读固定信息失败(具体含义参见返回码表)
以下是我的代码:
JNative jnative=null;
Pointer a = new Pointer(MemoryBlockFactory.createMemoryBlock(500));
try {
System.loadLibrary("sdtapi");//InterfaceFun是dll文件
jnative = new JNative("sdtapi","SDT_ReadBaseMsg");
jnative.setRetVal(Type.INT);
int m=0;
            String pucPHMsg = new String();
            a.setIntAt(0, 500);
//赋予参数值
jnative.setParameter(m++,1001);
jnative.setParameter(m++,a);
jnative.setParameter(m++,"");
jnative.setParameter(m++,pucPHMsg);
jnative.setParameter(m++,"");
jnative.setParameter(m++,1);
jnative.invoke();
System.out.println("读取证/卡固定信息:"+Integer.toHexString(jnative.getRetValAsInt()));
System.out.println(a.getSize()+"==");
System.out.println(a.getAsInt(0)+"==");
System.out.println(a.getAsString().getBytes("gbk")+"==");
} catch (Exception e) {
System.out.println("EncryptFile:" + e);
SDT_ClosePort();
}finally{
if(jnative!=null){
jnative.dispose();
}
a.dispose();
}
输出的值是:
读取证/卡固定信息:90
500==
-1761184885==
[B@913fe2==这个方法读取的是身份证信息,是华旭的一个接口,现在不知道怎么获取身份证上的信息。指针javaJNativec++读取身份证信息