浅谈JNI的使用--java调用dll
2013-02-03 23:46
429 查看
什么是JNI?Java Native
Interface(Java本地接口)的简写。使用这个接口,可以轻松实现java对动态链接库Dynamic Link
Library(dll)文件的调用,以实现一些C/C++的功能
本文章参考自网络一篇文章,做了一些小改动和补充说明。
一、建立java文件
注意点:1.要对dll里面的方法做本地声明
2.加载dll
示例代码:
public class testdll {
static{
System.loadLibrary("goodluck");
//注意:不写扩展名,名字要与dll的文件名一致
}
public native int getValue();
public native void setValue(int i);
public static void main(String[] args) {
testdll test=new
testdll();
test.setValue(10);
System.out.println(test.getValue());
}
}
二、编译
javac
testdll.java
------如果没有错,进行下一步
javah
testdll
------生成testdll.h这个头文件
三、实现步骤一中声明的方法
打开VC++6.0,建立一个dll空工程,把testdll.h导入工程中,新建一个test.cpp源文件
打开testdll.h,发现里面有两个方法:
JNIEXPORT jint JNICALL Java_testdll_getValue
(JNIEnv *, jobject);
JNIEXPORT void JNICALL Java_testdll_setValue
(JNIEnv *, jobject, jint);
JNIEXPORT不用管,第二个单词jint/void是返回值,jint相当于int类型,JNICALL不用管,每一个方法名前都有前缀Java_testll_,前两个参数JNIEnv
*和jobject不用管,第二个方法的第三个参数jint就是java文件里的int i。
上面有声明了,现在就要实现这两个方法,把代码补充进来吧:)
示例代码:
#include "testdll.h"
int i=0;
JNIEXPORT jint JNICALL Java_testdll_getValue
(JNIEnv *, jobject){
return i;
}
JNIEXPORT void JNICALL Java_testdll_setValue
(JNIEnv *, jobject, jint j){
i=j;
}
四、编译
此时编译会出现error,主要是提示找不到jni.h(这个包含在testdll.h)里,需要我们把jni.h、jni_md.h复制到C:\Program
Files\Microsoft Visual
Studio\VC98\Include这个目录里(默认安装目录,如果安装VC不是这个目录,请自行找到Include目录)。
jni.h------------------jdk安装目录\include
jni_md.h------------jdk安装目录\include\win32
然后再编译,构建,就有了test.dll这个动态链接库文件了,把它重命名成goodluck.dll,然后复制到testdll.java的目录下,运行吧:)
java testdll
结果:
10
Interface(Java本地接口)的简写。使用这个接口,可以轻松实现java对动态链接库Dynamic Link
Library(dll)文件的调用,以实现一些C/C++的功能
本文章参考自网络一篇文章,做了一些小改动和补充说明。
一、建立java文件
注意点:1.要对dll里面的方法做本地声明
2.加载dll
示例代码:
public class testdll {
static{
System.loadLibrary("goodluck");
//注意:不写扩展名,名字要与dll的文件名一致
}
public native int getValue();
public native void setValue(int i);
public static void main(String[] args) {
testdll test=new
testdll();
test.setValue(10);
System.out.println(test.getValue());
}
}
二、编译
javac
testdll.java
------如果没有错,进行下一步
javah
testdll
------生成testdll.h这个头文件
三、实现步骤一中声明的方法
打开VC++6.0,建立一个dll空工程,把testdll.h导入工程中,新建一个test.cpp源文件
打开testdll.h,发现里面有两个方法:
JNIEXPORT jint JNICALL Java_testdll_getValue
(JNIEnv *, jobject);
JNIEXPORT void JNICALL Java_testdll_setValue
(JNIEnv *, jobject, jint);
JNIEXPORT不用管,第二个单词jint/void是返回值,jint相当于int类型,JNICALL不用管,每一个方法名前都有前缀Java_testll_,前两个参数JNIEnv
*和jobject不用管,第二个方法的第三个参数jint就是java文件里的int i。
上面有声明了,现在就要实现这两个方法,把代码补充进来吧:)
示例代码:
#include "testdll.h"
int i=0;
JNIEXPORT jint JNICALL Java_testdll_getValue
(JNIEnv *, jobject){
return i;
}
JNIEXPORT void JNICALL Java_testdll_setValue
(JNIEnv *, jobject, jint j){
i=j;
}
四、编译
此时编译会出现error,主要是提示找不到jni.h(这个包含在testdll.h)里,需要我们把jni.h、jni_md.h复制到C:\Program
Files\Microsoft Visual
Studio\VC98\Include这个目录里(默认安装目录,如果安装VC不是这个目录,请自行找到Include目录)。
jni.h------------------jdk安装目录\include
jni_md.h------------jdk安装目录\include\win32
然后再编译,构建,就有了test.dll这个动态链接库文件了,把它重命名成goodluck.dll,然后复制到testdll.java的目录下,运行吧:)
java testdll
结果:
10
相关文章推荐
- 浅谈JNI的使用--java调用dll
- 浅谈JNI的使用--java调用dll(原创)
- JAVA调用DLL -- JNA和Fat Jar的使用及打包问题(一)
- Chap5:使用JNI技术实现java程序调用第三方dll(c/c++)文件的功能
- java使用JNA(Java Native Access)调用dll的方法
- 使用Java的JNative调用dll动态链接库
- 使用Java的JNative调用dll动态链接库
- 【JNI调用DLL动态库】Java使用JNI调用DLL动态链接库学习记录
- 使用JNI技术实现JAVA程序调用dll
- java 使用jacob 调用中控考勤机dll(详细配置)
- Java使用JNI调用VC的DLL的一个小例子
- 使用Java调用DLL动态链接库(如何在Java中调用DLL方法)
- Java进阶: 使用 Jni 调用 Dll 的实现(使用VS2008 生成Dll)
- 使用JNI技术实现JAVA程序调用dll
- 整理MINGW编译dll使用JNI被java调用的几种方式
- java使用jna调用c#中dll的方法详解
- c#调用java代码(jar转化成dll):ikvm 使用注意事项
- 如何在java中使用jna.jar调用Delphi写的dll
- 使用JNI技术实现JAVA程序调用dll
- java调用dll进行人脸识别(JNI的使用)