由于项目需要,使用读卡机,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中使用JNative库来调用本地(操作系统级别的)动态链接库(DLL或SO文件)的技术。在Java中,为了与操作系统底层功能进行交互,比如调用C/C++编译的库,我们可以使用Java ...
本篇文章将详细介绍如何使用jnative框架在Java中调用DLL动态库,并提供一个简单的示例。 首先,理解jnative框架的核心概念。jnative是一个纯Java库,它提供了一种简单的方式来调用C和C++的函数,无需编写JNI头文件...
利用JNative实现Java调用动态库.pdf
然后,我们可以创建一个Java类,如`Test`,并使用JNative提供的API来调用原生库。在`Test`类中,我们通过`System.loadLibrary()`或`JNative`构造函数加载DLL,并指定要调用的函数名。在本例中,我们调用的函数名为`...
JNative是一个Java库,它为Java程序员提供了一种直接调用这些本地代码的能力,无需通过JNI(Java Native Interface)的复杂过程。 JNative的核心思想是将Java方法与本地函数绑定,使得Java代码可以像调用普通Java...
这些方法会调用动态链接库中的功能。 3. **编译本地代码**:将C/C++源代码编译成动态链接库(在Windows上是.dll文件,在Unix/Linux上是.so文件)。 4. **加载库并注册本地方法**:在Java代码中,使用`System....
`Jnative1.4`是一个库,它提供了在Java中调用动态库的功能。 JNI是Java平台标准的一部分,允许Java代码和其他语言写的代码进行交互。它为Java开发者提供了一种方式来编写本地方法,这些方法可以直接访问和操作硬件...
【Java调用动态链接库(DLL)通过JNative】 在软件开发中,有时我们需要在Java应用程序中使用由其他编程语言(如C++或Delphi)编写的动态链接库(DLL)。`JNative`是一个Java库,它允许我们直接在Java代码中调用DLL...
比较 JNI 和 JNative.jar 调用动态库,JNative.jar 调用动态库的执行效率较慢,但它提供了一个简洁的接口,使用起来更加方便。 三、JNI 中 Java 类型与 C/C++ 类型对应关系 在使用 JNI 调用动态库时,需要了解 JNI...
本压缩包文件“java调用动态库(Jnative).zip”很可能包含了一系列示例、教程和相关资源,帮助开发者学习如何在Java程序中使用JNI来调用动态库。 JNI全称为Java Native Interface,它定义了一组接口和数据类型,使得...
本实例主要讲解了如何通过Java调用动态库(DLL),特别是使用JNA(Java Native Access)和JNative两种不同的库来进行操作。下面我们将详细探讨这两个库以及它们在不同场景下的应用。 1. JNA(Java Native Access) ...
在Java程序中调用DLL(动态链接库)文件通常是通过JNI(Java Native Interface)来实现的,而JNative是JNI的一个封装库,它提供了一种更简洁的方式来调用C/C++编写的本地代码。这篇博客文章可能介绍了如何利用...
本篇文章将详细介绍如何在Java中调用动态库,主要涉及两种方法:JNative和JNI(Java Native Interface)。 首先,让我们了解JNative。JNative是一个开源库,它为Java提供了方便的接口来调用C和C++的动态库。通过...
`JNative` 是一个用于Java调用本地代码(如DLL)的开源库,它提供了一个方便的接口,使得Java程序员可以轻松地与动态链接库进行交互。本教程将围绕如何使用`JNative`来调用DLL进行深入讲解。 首先,我们要理解Java...
本教程将通过一个简单的例子来演示如何使用JNI调用DLL动态链接库。 首先,我们需要理解JNI的工作原理。JNI提供了一套接口,使得Java代码可以通过这些接口来调用本地(Native)代码,这里的本地代码可以是C、C++等...
在Java中调用动态库,通常有两种主要的方法:一是使用Java Native Interface (JNI),二是通过第三方库如JNative。这两种方式各有优缺点,适用于不同的场景和需求。 ### 1. 使用Java Native Interface (JNI) JNI是...
`JNative.jar`包含了JNative的实现,`TestJNative.java`是使用JNative调用DLL的示例。 3. **VC++创建DLL**: `CreateDLL.dll`是由Visual C++(VC++)编译生成的动态链接库,通常包含了一些可供其他程序调用的函数...
以下是一段典型的使用JNative调用动态库的示例代码: ```java public static final int messageBox(int parentHandle, String message, String caption, int buttons) throws NativeException, ...
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...