Java JNI调用dll中的C代码的流程
2016-10-30 21:39
239 查看
1: 新建Java工程,在java中编写Nativie方法的声明和调用代码。如图1:
![](http://img.blog.csdn.net/20161030215042681?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
图1
2: window系统下打开cmd,进入java工程的bin目录下,输入javah命令+java类的全限定类名,生成JNI的头文件:
com_test_jni_JniTest.h (在java工程目录下),如图2所示
![](http://img.blog.csdn.net/20161030215129995?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
图2
3: 新建VS2013工程,将com_test_jni_JniTest.h复制到VS2013工程中,VS2013工程中右侧解决方案资源管理器中右键“头文件”-添加-现有项,找到com_test_jni_JniTest.h,点击确定。然后在com_test_jni_JniTest.h中发现报错:“找不到源文件:jni.h”。然后在windows中的JDK的安装目录中搜索并找到“jni.h”,将其复制到VS2013工程中,VS2013工程中右侧解决方案资源管理器中右键“头文件”-添加-现有项,找到jni.h,点击确定。同理在JDK目录中找到jni_md.h,然后复制到VS2013工程中。(注意:一定要把com_test_jni_JniTest.h中#include
<jni.h>改为#include "jni.h",否则还会报错。)
4: 新建01.c文件,实现.h中声明的方法,如图3所示
![](http://img.blog.csdn.net/20161030215152907?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
图3
5: 生成dll文件:
在VS2013开发环境中间Debug旁下拉箭头中选择“配置管理器中”的右上角“活动解决方案平台”-编辑-选择自己windows的平台。右键VS2013工程中右侧解决方案资源管理器中工程名,选择“属性”,然后将”配置类型“改为”动态库.dll“,然后重新生成解决方案。最后在工程目录中的Debug中可以找到New20160810.dll
6: 在java代码中,加载dll,如下代码:
static{
System.loadLibrary("New20160810");
}
7: 将New20160810.dll的复制到和src并列的目录,然后运行java工程即可以看到日志:C String,表示java通过JNI调用dll中的c代码成功。
图1
2: window系统下打开cmd,进入java工程的bin目录下,输入javah命令+java类的全限定类名,生成JNI的头文件:
com_test_jni_JniTest.h (在java工程目录下),如图2所示
图2
3: 新建VS2013工程,将com_test_jni_JniTest.h复制到VS2013工程中,VS2013工程中右侧解决方案资源管理器中右键“头文件”-添加-现有项,找到com_test_jni_JniTest.h,点击确定。然后在com_test_jni_JniTest.h中发现报错:“找不到源文件:jni.h”。然后在windows中的JDK的安装目录中搜索并找到“jni.h”,将其复制到VS2013工程中,VS2013工程中右侧解决方案资源管理器中右键“头文件”-添加-现有项,找到jni.h,点击确定。同理在JDK目录中找到jni_md.h,然后复制到VS2013工程中。(注意:一定要把com_test_jni_JniTest.h中#include
<jni.h>改为#include "jni.h",否则还会报错。)
4: 新建01.c文件,实现.h中声明的方法,如图3所示
图3
5: 生成dll文件:
在VS2013开发环境中间Debug旁下拉箭头中选择“配置管理器中”的右上角“活动解决方案平台”-编辑-选择自己windows的平台。右键VS2013工程中右侧解决方案资源管理器中工程名,选择“属性”,然后将”配置类型“改为”动态库.dll“,然后重新生成解决方案。最后在工程目录中的Debug中可以找到New20160810.dll
6: 在java代码中,加载dll,如下代码:
static{
System.loadLibrary("New20160810");
}
7: 将New20160810.dll的复制到和src并列的目录,然后运行java工程即可以看到日志:C String,表示java通过JNI调用dll中的c代码成功。
相关文章推荐
- 用Android Studio通过Java代码调用C代码的JNI流程
- java中jni调用不需要配置dll的处理代码
- JNI NDK (AndroidStudio+CMake )实现C C++调用Java代码流程
- JNI NDK (AndroidStudio+CMake )实现Java调用C C++代码流程
- Java 通过JNI调用C或者CPP代码
- java调用dll(JNI的使用)
- 整理MINGW编译dll使用JNI被java调用的几种方式
- JNI 使用总结 (JAVA 调用C语言编写的DLL/SO/SL文件)
- 转 J2SE:JNI:JAVA调用已经存在的动态连接库(dll)
- java运用jni调用dll(含源码)实现屏蔽系统热键和任务栏
- java调用dll进行人脸识别(JNI的使用)
- JNI之一:基础 && JAVA调用win dll实例
- 浅谈JAVA通过JNI调用本地的DLL
- [转]Java调用DLL动态链接库的方案:JNI, Jawin, Jacob.
- Java进阶: 使用 Jni 调用 Dll 的实现(使用VS2008 生成Dll)
- 使用JNI技术实现JAVA程序调用dll
- J2SE:JNI:JAVA调用已经存在的动态连接库(dll)
- win32下使用gcc编译供java 调用的dll须知(jni) http://www.blogjava.net/lixf/archive/2005/12/23/25177.html
- Java使用JNI调用VC的DLL的一个小例子
- JNI技术实践(1) Java调用C/C++代码