1.安装
到jnative.sourceforge.net下载最新的JNative二进制包,解压后得到3个文件:JNativeCpp.dll,libJNativeCpp.so,JNative.jar,其中:
JNativeCpp.dll 放在windows/system32目录下
libJNativeCpp.so linux下使用
JNative.jar 导入工程中
2.使用
2.1.加载dll文件
JNative可使用两种方式加载dll文件:
使用System.loadLibrary加载
使用此方法可加载系统目录中的dll文件。可以先把dll文件复制到system32目录下,使用文件前缀名作为参数来加载dll文件。
使用System.load加载
此方法参数为dll文件全路径名。
2.2.调用函数
1、首先创建JNative对象:
JNative jnative = new JNative(dll文件名, 函数名);
2、设置返回值类型:
jnative.setRetVal(Type.INT);
3、设置参数
jnative.setParameter(0, Type.STRING, …); //设置第一个参数为字符串
jnative.setParameter(1, Type.INT, String.valueof(…)); //设置第二个参数为整数
4、执行
n.invoke();
5
、获取返回值
Integer.parseInt(jnative.getRetVal());
2.3. 一个实例
import org.xvolks.jnative.JNative;
import org.xvolks.jnative.exceptions.NativeException;
import org.xvolks.jnative.misc.basicStructures.AbstractBasicData;
import org.xvolks.jnative.pointers.Pointer;
import org.xvolks.jnative.pointers.memory.MemoryBlockFactory;
/**
* SystemTime
*
* typedef struct _SYSTEMTIME {
* WORD wYear;
* WORD wMonth;
* WORD wDayOfWeek;
* WORD wDay;
* WORD wHour;
* WORD wMinute;
* WORD wSecond;
* WORD wMilliseconds;
* } SYSTEMTIME,
*/
public class SystemTime extends AbstractBasicData<systemtime> {
public short wYear;
public short wMonth;
public short wDayOfWeek;
public short wDay;
public short wHour;
public short wMinute;
public short wSecond;
public short wMilliseconds;
/**
* 分配内存,并返回指针
*/
public Pointer createPointer() throws NativeException {
pointer = new Pointer(MemoryBlockFactory.createMemoryBlock(getSizeOf()));
return pointer;
}
/**
* 内存大小
*/
public int getSizeOf() {
return 8 * 2;
}
/**
* 获取通过内存指针解析出结果
*/
public SystemTime getValueFromPointer() throws NativeException {
wYear = getNextShort();
wMonth = getNextShort();
wDayOfWeek = getNextShort();
wDay = getNextShort();
wHour = getNextShort();
wMinute = getNextShort();
wSecond = getNextShort();
wMilliseconds = getNextShort();
return this;
}
public SystemTime() throws NativeException {
super(null);
createPointer();
}
public String toString() {
return wYear + "/" + wMonth + "/" + wDay + " at + " + wHour + ":" + wMinute + ":" + wSecond
+ ":" + wMilliseconds;
}
public static SystemTime GetSystemTime() throws NativeException, IllegalAccessException {
// 创建对象
JNative nGetSystemTime = new JNative("Kernel32.dll", "GetSystemTime");
SystemTime systemTime = new SystemTime();
// 设置参数
nGetSystemTime.setParameter(0, systemTime.getPointer());
nGetSystemTime.invoke();
// 解析结构指针内容
return systemTime.getValueFromPointer();
}
public static void main(String[] args) throws NativeException, IllegalAccessException {
System.err.println(GetSystemTime());
}
}</systemtime>
分享到:
相关推荐
本篇文章将详细介绍如何使用jnative框架在Java中调用DLL动态库,并提供一个简单的示例。 首先,理解jnative框架的核心概念。jnative是一个纯Java库,它提供了一种简单的方式来调用C和C++的函数,无需编写JNI头文件...
首先定义Java中的JNI接口,然后使用`javah`生成C/C++的头文件,接着编写并编译DLL,最后在Java程序中加载并调用DLL函数。这个过程虽然复杂,但是一旦熟悉了,就能灵活地在Java和本地代码之间建立桥梁,充分利用两者...
### Java通过JNative调用DLL的关键知识点 #### JNative简介 JNative是一个强大的Java库,允许Java应用程序直接调用本地动态链接库(DLL)或共享库。它为开发者提供了一个简单而灵活的方式来集成本地代码与Java环境...
下面通过一个具体的例子来展示如何使用JNative框架调用DLL中的函数。 #### 示例场景 假设我们需要编写一个Java程序,该程序调用名为`TestAppSvr.dll`的DLL文件中的`TestConnect()`函数来检测某个应用服务器的状态...
本文将详细介绍如何在Java中使用JNative库来调用DLL文件。 首先,理解DLL文件:DLL(Dynamic Link Library)是Windows操作系统中的一个共享库,它包含了一组可执行函数和资源,可供多个应用程序同时使用,以节省...
标题中的“jnative调用动态库”指的是Java中使用JNative库来调用本地(操作系统级别的)动态链接库(DLL或SO文件)的技术。在Java中,为了与操作系统底层功能进行交互,比如调用C/C++编译的库,我们可以使用Java ...
`JNative.jar`包含了JNative的实现,`TestJNative.java`是使用JNative调用DLL的示例。 3. **VC++创建DLL**: `CreateDLL.dll`是由Visual C++(VC++)编译生成的动态链接库,通常包含了一些可供其他程序调用的函数...
JNative的核心思想是通过Java接口来调用DLL中的函数,它提供了一种高级的抽象层,隐藏了JNI的底层细节。这样,开发者可以避免直接编写C语言的头文件和实现文件,减少了工作量和出错的可能性。 使用JNative的过程...
3. **yikatong.r.java**:这可能是项目中定义的Java源代码文件,包含了使用JNative调用DLL的Java类。在这个文件中,开发者会定义本地方法签名,然后通过JNative API来实现具体的调用。 4. **jnative.dll**:这是一...
下面我们将通过一个具体的例子来展示如何使用JNative来调用DLL中的方法。 #### 准备工作 1. **下载并配置JNative:** - 获取JNative的三个核心文件:`JNativeCpp.dll`(Windows平台)、`libJNativeCpp.so`(Linux...
JNative是一个开源的Java库,它提供了一种方法使得Java程序能够直接调用C/C++编写的函数,从而间接实现了调用DLL的功能。JNative通过JNI(Java Native Interface)技术,为Java程序员提供了一个安全且灵活的方式来...
1、Labview生成Dll文件 2、Java通过Jnative第三方Jar包调用Labview生成的DLL文件 3、Java在Windows系统调用Labview生成的Dll的说明 有JNative的使用说明 直接下载,根据使用说明可以直接使用。
- **加载本地库**:在Java中使用`System.loadLibrary()`加载DLL或SO文件。 - **调用本地方法**:在Java中调用之前声明的native方法。 4. **JNative组件中的文件** - `JNativeCpp.dll`:这是Windows平台的DLL文件...
使用JNative调用Win32 API的基本步骤如下: 1. 在Java代码中声明native方法,定义与本地方法对应的签名。 2. 编写C/C++代码实现这些native方法,调用Win32 API。 3. 使用JNI工具生成Java本地接口头文件。 4. 编译C/...
`TestJNative.java`很可能是使用JNative调用DLL的示例代码。 `jinvoke.jar`是另一个相关的库,它可能提供了一种更简便的Java本地调用方式,简化了JNI的使用。`TestJInvoke.java`可能展示了如何使用jinvoke来调用`...
4. **加载和调用DLL**:在Java代码中,使用`System.loadLibrary`加载DLL,然后就可以像调用普通Java方法一样调用本地方法。 5. **测试与调试**:编写测试代码,如`EhfscliaxTest.exe`,检查调用DLL的功能是否正常。...
使用JNative调用DLL的基本流程: 1. **编写JNI头文件**:使用`javah`工具生成JNI头文件,该文件包含了C/C++函数原型,这些函数将作为Java和本地代码之间的桥梁。 2. **编写本地代码**:根据生成的头文件编写C/C++...
这个示例展示了如何使用JNative在Java中调用一个名为`InterfaceFun`的DLL,该DLL中有一个名为`AddZhiYe`的函数,接收多个参数,包括IP地址、用户名、密码和两个整数,并返回一个整数值。 总的来说,JNative提供了一...
`JNative`是一个Java库,它允许我们直接在Java代码中调用DLL中的函数,实现了Java与本地代码的交互。以下是一个关于如何使用JNative调用DLL函数的实例,主要涉及到两个关键函数:`EncryptPswStr`和`DecryptPswStr`,...