什么是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

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

java jni调用dll_浅谈JNI的使用--java调用dll(原创)相关推荐

  1. 浅谈2011年上半年Java游戏领域动态

    浅谈2011年上半年Java游戏领域动态 时间过得真快,转瞬已是 2011 年 6 月,仿佛都能听到 2012 正率领天启四骑士向我们快速冲锋的马蹄声了.所以趁着世界还没毁灭,我就先来谈谈 2011 ...

  2. java 小偷_浅谈小偷程序之Java

    浅谈小偷程序之Java 题外话:如果用EditPlus作为编辑器的话如果保存的格式默认为unicode的话那么在里面写中文用resin作为应用服务器的话就可能出现报500 Servlet错误哦!主要是 ...

  3. java rpc远程调用_浅谈rpc(远程过程调用)

    信息来源:邪恶八进制信息安全团队 RPC协议2:这个协议是一个够年头的协议 本文介绍用于ONC RPC协议规范.此协议使用XDR语言进行描述,并文不打算描述具体的使用细节而只介绍RPC协议本身. ON ...

  4. java对象头_浅谈java对象结构 对象头 Markword

    概述 对象实例由对象头.实例数据组成,其中对象头包括markword和类型指针,如果是数组,还包括数组长度; | 类型 | 32位JVM | 64位JVM| | ------ ---- | ----- ...

  5. java 多线程同步_浅谈Java多线程(状态、同步等)

    Java多线程是Java程序员必须掌握的基本的知识点,这块知识点比较复杂,知识点也比较多,今天我们一一来聊下Java多线程,系统的整理下这部分内容. 一.Java中线程创建的三种方式: 1.通过继承T ...

  6. java list数组排序_浅谈对象数组或list排序及Collections排序原理

    常需要对list进行排序,小到List,大到对自定义的类进行排序.不需要自行归并或堆排序.简单实现一个接口即可. 本文先会介绍利用Collections对List进行排序,继而讲到Collection ...

  7. java虚拟机类加载机制浅谈_浅谈Java虚拟机(三)之类加载机制

    在<浅谈Java虚拟机>这篇文章中,我们提到了JVM从操作系统方面来说,可以将其看做是一个进程,分别有类加载器子系统,执行引擎子系统和垃圾收集子系统.这一篇文章就简单的来谈一下类加载器子系 ...

  8. java手动回收_浅谈java是如何做资源回收补救的

    学习java的过程,我们经常谈论一个对象的回收,尤其是资源类型,如果没有显示的关闭,对象就被回收了,说明出现了资源泄漏.java本身为了防止这种情况,做了一些担保的方式,确保可以让未关闭的资源合理回收 ...

  9. java对象头markword_浅谈java对象结构 对象头 Markword

    概述 对象实例由对象头.实例数据组成,其中对象头包括markword和类型指针,如果是数组,还包括数组长度; | 类型 | 32位JVM | 64位JVM| | ------ ---- | ----- ...

最新文章

  1. Exchange Server 2013 LAB Part 4.内部客户端访问
  2. 徒手解密 Spring Boot 中的 Starter自动化配置黑魔法
  3. 中国ATM龙头转型 全要素布局人工智能
  4. php在线考试自动批卷_php网络在线考试组卷系统
  5. java servicefactory_Java DirectoryServiceFactory.getDirectoryService方法代碼示例
  6. Nginx的rewrite之if指令(一)
  7. 视觉标定,再来一波!!更简单粗暴!!!!!!
  8. 参考TinyOS官方网站实现BlinkToRadio
  9. 什么是VXLAN?为什么需要VXLAN?
  10. 【Spring】Spring 解决循环依赖的 3 种方式
  11. Linux系统分区访问windows分区提示挂载失败
  12. 已知二叉树的前序序列跟中序序列求后序序列(C语言)
  13. android 软件安全与逆向分析(非虫)读书笔记
  14. Python制作黑客工具,发现了同学U盘里见不得人的秘密
  15. Jetson nano 开机自动连接 Wifi
  16. 超级计算机燕 排名,第一卷 六年之前 HK171 舍弃的超级计算机燕? (485加更)
  17. 查询出一班、二班的人数和平均分,并且按照由高到低排序
  18. Stanford CS224n 第一讲:深度自然语言处理
  19. 第一次约会聊天话题,资深老司机教你6个万能话题
  20. 如何链接外部JavaScript文件

热门文章

  1. 【db】mongodb的故事
  2. python使用md5加密_如何使用Python创建自己的加密货币
  3. node.js编写网页_为Node.js编写可扩展架构
  4. lighthouse_如何提高您的渐进式网络应用的Google Lighthouse得分(最高可达100分)
  5. 软件框架和软件架构的区别?
  6. WCF创建WebService正确操作步骤详解
  7. 利用Flash读取SQL Server数据库的值
  8. 每天进步一点点《ML - 感知机》
  9. 漫步线性代数十五——余弦和投影
  10. leetcode —— 34. 在排序数组中查找元素的第一个和最后一个位置