`
yinbinhome
  • 浏览: 120495 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

JNative使用,调用动态库

 
阅读更多

由于项目需要,使用读卡机,C++没学好,一些动态库使用起来很困难,在网上搜了好久发现JNative是一个很好的选择,简单,方便,只需要简单的几步就能很好调用动态库,下面是我写一段测试代码:

  1. packageJNative;
  2. importjava.io.IOException;
  3. importjava.util.StringTokenizer;
  4. importorg.xvolks.jnative.JNative;
  5. importorg.xvolks.jnative.Type;
  6. importorg.xvolks.jnative.exceptions.NativeException;
  7. importorg.xvolks.jnative.pointers.Pointer;
  8. importorg.xvolks.jnative.pointers.memory.MemoryBlockFactory;
  9. publicclassT2{
  10. /**
  11. *@paramargs
  12. *@throwsNativeException
  13. *@throwsIllegalAccessException
  14. *@throwsIOException
  15. */
  16. publicstaticvoidmain(String[]args)throwsNativeException,IllegalAccessException,IOException{
  17. T2t=newT2();
  18. t.Init();
  19. t.getName();
  20. //======CVR_ReadBaseMsg==================
  21. JNativen8=newJNative("termb.dll","CVR_ReadBaseMsg");
  22. Pointerpointer11=newPointer(MemoryBlockFactory.createMemoryBlock(1000));
  23. Pointerpointer12=newPointer(MemoryBlockFactory.createMemoryBlock(256));
  24. Pointerpointer13=newPointer(MemoryBlockFactory.createMemoryBlock(1024*1000));
  25. Pointerpointer14=newPointer(MemoryBlockFactory.createMemoryBlock(1024));
  26. inti=0;
  27. n8.setParameter(i++,pointer11);
  28. n8.setParameter(i++,pointer12);
  29. n8.setParameter(i++,pointer13);
  30. n8.setParameter(i++,pointer14);
  31. n8.setParameter(i++,4);
  32. n8.setRetVal(Type.INT);
  33. n8.invoke();
  34. Stringmsg=pointer11.getAsString();
  35. StringTokenizerst=newStringTokenizer(msg);
  36. /*while(st.hasMoreElements()){
  37. System.out.println(st.nextElement());
  38. }*/
  39. t.Close();
  40. }
  41. /**
  42. *分配内存,并返回指针
  43. */
  44. publicstaticPointercreatePointer()throwsNativeException{
  45. Pointerpointer=newPointer(MemoryBlockFactory.createMemoryBlock(getSizeOf()));
  46. returnpointer;
  47. }
  48. /**
  49. *内存大小
  50. */
  51. publicstaticintgetSizeOf(){
  52. return2*2;
  53. }
  54. publicStringgetName()throwsNativeException,IllegalAccessException{
  55. //读姓名
  56. JNativen4=newJNative("termb.dll","GetPeopleName");
  57. Pointerpointer3=newPointer(MemoryBlockFactory.createMemoryBlock(10));
  58. Pointerpointer4=newPointer(MemoryBlockFactory.createMemoryBlock(2));
  59. n4.setParameter(0,pointer3);
  60. n4.setParameter(1,pointer4);
  61. n4.setRetVal(Type.INT);
  62. n4.invoke();
  63. Stringname=pointer3.getAsString();
  64. if(n4.getRetValAsInt()==1){
  65. //System.out.println(n4.getRetVal());
  66. System.out.println("读取完毕!");
  67. }
  68. //System.out.println("返回值:"+n4.getRetValAsInt());
  69. System.out.println("姓名是--长度:"+name.length()+"姓名--"+name);
  70. returnname;
  71. }
  72. publicStringgetSex()throwsNativeException,IllegalAccessException{
  73. //读性别
  74. JNativen2=newJNative("termb.dll","GetPeopleSex");
  75. Pointerpointer1=newPointer(MemoryBlockFactory.createMemoryBlock(8));
  76. Pointerpointer2=newPointer(MemoryBlockFactory.createMemoryBlock(2));
  77. n2.setParameter(0,pointer1);
  78. n2.setParameter(1,pointer2);
  79. n2.setRetVal(Type.INT);
  80. n2.invoke();
  81. Stringsex=pointer1.getAsString();
  82. if(n2.getRetValAsInt()==1){
  83. System.out.println(n2.getRetVal());
  84. System.out.println("读取完毕!");
  85. }
  86. System.out.println("返回值:"+n2.getRetValAsInt());
  87. System.out.println("性别是--长度:"+sex.length()+"性别--"+sex);
  88. returnsex;
  89. }
  90. publicStringgetIDNo()throwsNativeException,IllegalAccessException{
  91. //读身份证号
  92. JNativen5=newJNative("termb.dll","GetPeopleIDCode");
  93. Pointerpointer5=newPointer(MemoryBlockFactory.createMemoryBlock(18));
  94. Pointerpointer6=newPointer(MemoryBlockFactory.createMemoryBlock(2));
  95. n5.setParameter(0,pointer5);
  96. n5.setParameter(1,pointer6);
  97. n5.setRetVal(Type.INT);
  98. n5.invoke();
  99. StringIDNo=pointer5.getAsString();
  100. if(n5.getRetValAsInt()==1){
  101. System.out.println(n5.getRetVal());
  102. System.out.println("读取完毕!");
  103. }
  104. System.out.println("返回值:"+n5.getRetValAsInt());
  105. System.out.println("身份证号是--长度:"+IDNo.length()+"身份证号--"+IDNo);
  106. returnIDNo;
  107. }
  108. publicStringgetAddress()throwsNativeException,IllegalAccessException{
  109. //读地址
  110. JNativen6=newJNative("termb.dll","GetPeopleAddress");
  111. Pointerpointer7=newPointer(MemoryBlockFactory.createMemoryBlock(100));
  112. Pointerpointer8=newPointer(MemoryBlockFactory.createMemoryBlock(2));
  113. n6.setParameter(0,pointer7);
  114. n6.setParameter(1,pointer8);
  115. n6.setRetVal(Type.INT);
  116. n6.invoke();
  117. Stringaddress=pointer7.getAsString();
  118. if(n6.getRetValAsInt()==1){
  119. System.out.println(n6.getRetVal());
  120. System.out.println("读取完毕!");
  121. }
  122. System.out.println("返回值:"+n6.getRetValAsInt());
  123. System.out.println("地址是--长度:"+address.length()+"地址--"+address);
  124. returnaddress;
  125. }
  126. publicStringgetDepartment()throwsNativeException,IllegalAccessException{
  127. //读发证机关
  128. JNativen7=newJNative("termb.dll","GetDepartment");
  129. Pointerpointer9=newPointer(MemoryBlockFactory.createMemoryBlock(100));
  130. Pointerpointer10=newPointer(MemoryBlockFactory.createMemoryBlock(2));
  131. n7.setParameter(0,pointer9);
  132. n7.setParameter(1,pointer10);
  133. n7.setRetVal(Type.INT);
  134. n7.invoke();
  135. Stringdepartment=pointer9.getAsString();
  136. if(n7.getRetValAsInt()==1){
  137. System.out.println(n7.getRetVal());
  138. System.out.println("读取完毕!");
  139. }
  140. System.out.println("返回值:"+n7.getRetValAsInt());
  141. System.out.println("地址是--长度:"+department.length()+"地址--"+department);
  142. returndepartment;
  143. }
  144. publicStringgetBirth()throwsNativeException,IllegalAccessException{
  145. //读生日
  146. JNativen9=newJNative("termb.dll","GetPeopleBirthday");
  147. Pointerpointer15=newPointer(MemoryBlockFactory.createMemoryBlock(100));
  148. Pointerpointer16=newPointer(MemoryBlockFactory.createMemoryBlock(2));
  149. n9.setParameter(0,pointer15);
  150. n9.setParameter(1,pointer16);
  151. n9.setRetVal(Type.INT);
  152. n9.invoke();
  153. Stringbirth=pointer15.getAsString();
  154. if(n9.getRetValAsInt()==1){
  155. System.out.println(n9.getRetVal());
  156. System.out.println("读取完毕!");
  157. }
  158. System.out.println("返回值:"+n9.getRetValAsInt());
  159. System.out.println("生日是--长度:"+birth.length()+"生日--"+birth);
  160. returnbirth;
  161. }
  162. publicvoidInit()throwsNativeException,IllegalAccessException{
  163. JNativen=newJNative("termb.dll","CVR_InitComm");
  164. n.setRetVal(Type.INT);
  165. n.setParameter(0,1001);
  166. n.invoke();
  167. System.out.println("请放置身份证!");
  168. intcnt=0;
  169. for(inti=0;;i++){
  170. //System.out.println("请正确放置身份证!");
  171. cnt++;
  172. JNativen3=newJNative("termb.dll","CVR_Authenticate");
  173. n3.setRetVal(Type.INT);
  174. n3.invoke();
  175. //System.out.println(n3.getRetVal());
  176. intr=n3.getRetValAsInt();
  177. if(r==1){
  178. break;
  179. }
  180. }
  181. System.out.println("正确放置,身份证初始化完成,卡放置正确!");
  182. JNativen1=newJNative("termb.dll","CVR_Read_Content");
  183. n1.setParameter(0,6);
  184. n1.setRetVal(Type.INT);
  185. n1.invoke();
  186. //System.out.println(n1.getRetVal());
  187. if(n1.getRetValAsInt()==1){
  188. System.out.println("读卡操作正确!");
  189. }
  190. }
  191. publicvoidClose()throwsNativeException,IllegalAccessException{
  192. JNativen1=newJNative("termb.dll","CVR_CloseComm");
  193. n1.invoke();
  194. //intt=n1.getRetValAsInt();
  195. }
  196. }
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics