由于项目需要,使用读卡机,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{
-
-
-
publicstaticvoidmain(String[]args)throwsNativeException,IllegalAccessException,IOException{
-
T2t=newT2();
- t.Init();
- t.getName();
-
-
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);
-
-
- 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("读取完毕!");
- }
-
-
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++){
-
- cnt++;
-
JNativen3=newJNative("termb.dll","CVR_Authenticate");
- n3.setRetVal(Type.INT);
- n3.invoke();
-
-
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();
-
-
if(n1.getRetValAsInt()==1){
-
System.out.println("读卡操作正确!");
- }
- }
-
publicvoidClose()throwsNativeException,IllegalAccessException{
-
JNativen1=newJNative("termb.dll","CVR_CloseComm");
- n1.invoke();
-
- }
- }
分享到:
相关推荐
利用JNative实现Java调用动态库.pdf
jnative框架调用dll动态库-简单demo(带dll文件)
JNative是目前比较简单的一个Java调用动态链接库jar包,使用简单,容易掌握,大家共同学习。
里面的.so是unix内核的系统用的(hp-ux,aix,linux,...)
java使用JNative调用动态连接库实例[文].pdf
用于java调用dll 用于java调用dll 用于java调用dll
Jnative1.4_java调用动态库所需jar,里面包含了一个可以测试的动态库,可以自己拿下来玩玩。
因工作的缘故,有机会接触了Java本地方法调用...使用Java的JNI调用C/C++的动态联结库有个固定的步骤,下面将以一个最简单的HelloWorld例子程序来说明调用过程。这个HelloWorld的例子只是简单的显示HelloWorld消息。
包括java调用动态库的实例与总结,其中有jna调用动态库和jnative调用动态库,分为直接java文件main方法调用和web项目中的servlet调用两种方法
java调用动态库(Jnative).zip
提供两种方法调用动态库 jnative + jni
JAVA调用动态链接库DLL之JNative学习源码,详细请参考:http://blog.csdn.net/testcs_dn/article/details/26980027
java调用本地.dll动态库解决办法
//纯c写到动态库 JNative clib = new JNative("libtest.so", "test_a"); //调用libtest.so下到test_a函数 clib.setRetVal(Type.STRING); //设置此函数的返回值 clib.invoke(); //函数执行 System.out.println(c...
jnative包用于调用dll动态库,目前(2011-12-20)最新版本为1.4RC2,官方正式版本文档为1.3,详见官方地址: http://jnative.free.fr/docs/ 这是最新的帮助文档HTML离线包,希望对大家有帮助 Packages org.xvolks....
由于项目要求,需要用Java调用windows的dll...Java调用动态库所需要关心的问题: l 如何装载dll文件,以及如何定位所要使用的方法; l 数据类型是如何对应的; l 如何给使用的方法传递参数; l 如何获取返回的值。
由于项目要求,需要用Java调用windows的...Java调用动态库所需要关心的问题: l 如何装载dll文件,以及如何定位所要使用的方法; l 数据类型是如何对应的; l 如何给使用的方法传递参数; l 如何获取返回的值。
是Java 调用DLL动态库框架,功能强大,告别往日的JNI,只需定义接口,就可以方便调用DLL库,为开发人员省了不少事。
jnative java 调用动态库 Kernel32.dll,读写串口、并口
java调用c程序的一个工具,同样是基于JNI的,但是使用起来超级方便,比JNA、JaWin等工具更加简单,这里是相应的dll文件,还有一个我用过的例子,希望能帮助需要的人.