由于项目需要,使用读卡机,C++没学好,一些动态库使用起来很困难,在网上搜了好久发现JNative是一个很好的选择,简单,方便,只需要简单的几步就能很好调用动态库,下面是我写一段测试代码:
- packageJNative;
- importjava.io.IOException;
- importjava.util.StringTokenizer;
- importorg.xvolks.jnative.JNative;
- importorg.xvolks.jnative.Type;
- importorg.xvolks.jnative.exceptions.NativeException;
- importorg.xvolks.jnative.pointers.Pointer;
- importorg.xvolks.jnative.pointers.memory.MemoryBlockFactory;
- publicclassT2{
- /**
- *@paramargs
- *@throwsNativeException
- *@throwsIllegalAccessException
- *@throwsIOException
- */
- publicstaticvoidmain(String[]args)throwsNativeException,IllegalAccessException,IOException{
- T2t=newT2();
- t.Init();
- t.getName();
- //======CVR_ReadBaseMsg==================
- JNativen8=newJNative("termb.dll","CVR_ReadBaseMsg");
- Pointerpointer11=newPointer(MemoryBlockFactory.createMemoryBlock(1000));
- Pointerpointer12=newPointer(MemoryBlockFactory.createMemoryBlock(256));
- Pointerpointer13=newPointer(MemoryBlockFactory.createMemoryBlock(1024*1000));
- Pointerpointer14=newPointer(MemoryBlockFactory.createMemoryBlock(1024));
- inti=0;
- n8.setParameter(i++,pointer11);
- n8.setParameter(i++,pointer12);
- n8.setParameter(i++,pointer13);
- n8.setParameter(i++,pointer14);
- n8.setParameter(i++,4);
- n8.setRetVal(Type.INT);
- n8.invoke();
- Stringmsg=pointer11.getAsString();
- StringTokenizerst=newStringTokenizer(msg);
- /*while(st.hasMoreElements()){
- System.out.println(st.nextElement());
- }*/
- t.Close();
- }
- /**
- *分配内存,并返回指针
- */
- publicstaticPointercreatePointer()throwsNativeException{
- Pointerpointer=newPointer(MemoryBlockFactory.createMemoryBlock(getSizeOf()));
- returnpointer;
- }
- /**
- *内存大小
- */
- publicstaticintgetSizeOf(){
- return2*2;
- }
- publicStringgetName()throwsNativeException,IllegalAccessException{
- //读姓名
- JNativen4=newJNative("termb.dll","GetPeopleName");
- Pointerpointer3=newPointer(MemoryBlockFactory.createMemoryBlock(10));
- Pointerpointer4=newPointer(MemoryBlockFactory.createMemoryBlock(2));
- n4.setParameter(0,pointer3);
- n4.setParameter(1,pointer4);
- n4.setRetVal(Type.INT);
- n4.invoke();
- Stringname=pointer3.getAsString();
- if(n4.getRetValAsInt()==1){
- //System.out.println(n4.getRetVal());
- System.out.println("读取完毕!");
- }
- //System.out.println("返回值:"+n4.getRetValAsInt());
- System.out.println("姓名是--长度:"+name.length()+"姓名--"+name);
- returnname;
- }
- publicStringgetSex()throwsNativeException,IllegalAccessException{
- //读性别
- JNativen2=newJNative("termb.dll","GetPeopleSex");
- Pointerpointer1=newPointer(MemoryBlockFactory.createMemoryBlock(8));
- Pointerpointer2=newPointer(MemoryBlockFactory.createMemoryBlock(2));
- n2.setParameter(0,pointer1);
- n2.setParameter(1,pointer2);
- n2.setRetVal(Type.INT);
- n2.invoke();
- Stringsex=pointer1.getAsString();
- if(n2.getRetValAsInt()==1){
- System.out.println(n2.getRetVal());
- System.out.println("读取完毕!");
- }
- System.out.println("返回值:"+n2.getRetValAsInt());
- System.out.println("性别是--长度:"+sex.length()+"性别--"+sex);
- returnsex;
- }
- publicStringgetIDNo()throwsNativeException,IllegalAccessException{
- //读身份证号
- JNativen5=newJNative("termb.dll","GetPeopleIDCode");
- Pointerpointer5=newPointer(MemoryBlockFactory.createMemoryBlock(18));
- Pointerpointer6=newPointer(MemoryBlockFactory.createMemoryBlock(2));
- n5.setParameter(0,pointer5);
- n5.setParameter(1,pointer6);
- n5.setRetVal(Type.INT);
- n5.invoke();
- StringIDNo=pointer5.getAsString();
- if(n5.getRetValAsInt()==1){
- System.out.println(n5.getRetVal());
- System.out.println("读取完毕!");
- }
- System.out.println("返回值:"+n5.getRetValAsInt());
- System.out.println("身份证号是--长度:"+IDNo.length()+"身份证号--"+IDNo);
- returnIDNo;
- }
- publicStringgetAddress()throwsNativeException,IllegalAccessException{
- //读地址
- JNativen6=newJNative("termb.dll","GetPeopleAddress");
- Pointerpointer7=newPointer(MemoryBlockFactory.createMemoryBlock(100));
- Pointerpointer8=newPointer(MemoryBlockFactory.createMemoryBlock(2));
- n6.setParameter(0,pointer7);
- n6.setParameter(1,pointer8);
- n6.setRetVal(Type.INT);
- n6.invoke();
- Stringaddress=pointer7.getAsString();
- if(n6.getRetValAsInt()==1){
- System.out.println(n6.getRetVal());
- System.out.println("读取完毕!");
- }
- System.out.println("返回值:"+n6.getRetValAsInt());
- System.out.println("地址是--长度:"+address.length()+"地址--"+address);
- returnaddress;
- }
- publicStringgetDepartment()throwsNativeException,IllegalAccessException{
- //读发证机关
- JNativen7=newJNative("termb.dll","GetDepartment");
- Pointerpointer9=newPointer(MemoryBlockFactory.createMemoryBlock(100));
- Pointerpointer10=newPointer(MemoryBlockFactory.createMemoryBlock(2));
- n7.setParameter(0,pointer9);
- n7.setParameter(1,pointer10);
- n7.setRetVal(Type.INT);
- n7.invoke();
- Stringdepartment=pointer9.getAsString();
- if(n7.getRetValAsInt()==1){
- System.out.println(n7.getRetVal());
- System.out.println("读取完毕!");
- }
- System.out.println("返回值:"+n7.getRetValAsInt());
- System.out.println("地址是--长度:"+department.length()+"地址--"+department);
- returndepartment;
- }
- publicStringgetBirth()throwsNativeException,IllegalAccessException{
- //读生日
- JNativen9=newJNative("termb.dll","GetPeopleBirthday");
- Pointerpointer15=newPointer(MemoryBlockFactory.createMemoryBlock(100));
- Pointerpointer16=newPointer(MemoryBlockFactory.createMemoryBlock(2));
- n9.setParameter(0,pointer15);
- n9.setParameter(1,pointer16);
- n9.setRetVal(Type.INT);
- n9.invoke();
- Stringbirth=pointer15.getAsString();
- if(n9.getRetValAsInt()==1){
- System.out.println(n9.getRetVal());
- System.out.println("读取完毕!");
- }
- System.out.println("返回值:"+n9.getRetValAsInt());
- System.out.println("生日是--长度:"+birth.length()+"生日--"+birth);
- returnbirth;
- }
- publicvoidInit()throwsNativeException,IllegalAccessException{
- JNativen=newJNative("termb.dll","CVR_InitComm");
- n.setRetVal(Type.INT);
- n.setParameter(0,1001);
- n.invoke();
- System.out.println("请放置身份证!");
- intcnt=0;
- for(inti=0;;i++){
- //System.out.println("请正确放置身份证!");
- cnt++;
- JNativen3=newJNative("termb.dll","CVR_Authenticate");
- n3.setRetVal(Type.INT);
- n3.invoke();
- //System.out.println(n3.getRetVal());
- intr=n3.getRetValAsInt();
- if(r==1){
- break;
- }
- }
- System.out.println("正确放置,身份证初始化完成,卡放置正确!");
- JNativen1=newJNative("termb.dll","CVR_Read_Content");
- n1.setParameter(0,6);
- n1.setRetVal(Type.INT);
- n1.invoke();
- //System.out.println(n1.getRetVal());
- if(n1.getRetValAsInt()==1){
- System.out.println("读卡操作正确!");
- }
- }
- publicvoidClose()throwsNativeException,IllegalAccessException{
- JNativen1=newJNative("termb.dll","CVR_CloseComm");
- n1.invoke();
- //intt=n1.getRetValAsInt();
- }
- }