浅谈JNI的使用--java调用dll(原创)
2013-10-11 16:45
239 查看
转自:http://singlerwong.spaces.eepw.com.cn/articles/article/item/25111
什么是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); /** * @param args */ 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,发现里面有两个方法: /* * Class: testdll * Method: getValue * Signature: ()I */ JNIEXPORT jint JNICALL Java_testdll_getValue (JNIEnv *, jobject); /* * Class: testdll * Method: setValue * Signature: (I)V */ 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
- 使用 Jni 调用 Dll 的实现JAVA在cmd控制台刷屏
- Java调用dll例子,JNative的使用
- JNI 使用总结 (JAVA 调用C语言编写的DLL/SO/SL文件)
- java使用jna 方法调用Win32 dll
- Java进阶: 使用 Jni 调用 Dll 的实现(使用VS2008 生成Dll)
- 使用Java的JNative调用dll动态链接库
- java调用dll进行人脸识别(JNI的使用)
- JAVA使用JNI 调用 C++ DLL 动态连接库从零开始 一
- 【JNI调用DLL动态库】Java使用JNI调用DLL动态链接库学习记录
- (原创)VB调用DLL(VC)使用结构体参数时的内存对齐及分配的问题.
- Chap5:使用JNI技术实现java程序调用第三方dll(c/c++)文件的功能
- 整理MINGW编译dll使用JNI被java调用的几种方式
- Java调用win32API与DLL的使用
- Java使用JNI调用DLL的问题总结
- Java调用win32API与DLL的使用
- 在java中使用JNA调用加载DLL
- 【原创】PB调用SAP的Web Service结构体数组参数方法详解(使用C#调用Web Service生成dll)
- [JNA系列]Java调用Delphi编写的Dll之实例Delphi使用PWideChar