用JNI调用C或C++动态联接库原来如此简单

     因工作的缘故,有机会接触了 Java 本地方法调用( JNI )。本文中记下了初试 JNI 的过程和一点点体会。

使用 JavaJNI 调用 C/C++ 的动态联结库有个固定的步骤,下面将以一个最简单的 HelloWorld 例子程序来说明调用过程。这个 HelloWorld 的例子只是简单的显示 HelloWorld 消息。

 

第一步 编写 Java

首先,我们创建一个名为 jnitestEclipse 工程,并新建一个 src 源代码目录。

这里我们编写两个 Java 类,一个命名为 HelloWorld ,一个命名为 TestDLLHelloWorld 类包含一个本地方法 displayHelloWorld() TestDLL 用于测试这个本地方法。 HelloWorld 的源码清单如下:

说明: ①是java本地方法申明; ②装入动态链接库, "HelloWorld" 是要装入的动态链接库名称。

第二步 编译 Java

Eclipse 工具中编译 Java 类。编译后的 class 文件会自动放入工程目录下的 bin 目录中。

第三步 生成 C/C++ 头文件

windows 中打开一个命令窗口,进入 jnitest 工程所在目录下的 bin 目录如: D:/workspace/jnitest/bin 。键入 javah -classpath D:/workspace/jnitest/bin HelloWorld 命令生成头文件 HelloWorld.h 。内容如下:

注意,不要修改这个头文件。

第四步 编写本地方法实现

VC6 创建 HelloWorld Win32 动态链接库工程。将上述生成的头文件 HelloWorld.h 拷贝到

D:/Program Files/Microsoft Visual Studio/MyProjects/HelloWorld 目录下面。

D:/j2sdk1.4.2/include 目录下的 jni.hD:/j2sdk1.4.2/include/win32/jni_md.h 两个头文件拷贝到 VC 安装目录下的 D:/Program Files/Microsoft Visual Studio/VC98/Include 目录下面。在 VC IDE 中新建 HelloWorld.cpp 文件,实现头文件中声明的方法并编译生成 DLL

第五部 运行测试程序

先将生成的 DLL 拷贝到 jnitest 工程的 D:/workspace/jnitest/bin 下面,然后设置 DLL 搜索路径(环境变量 PATH )为 D:/workspace/jnitest/binJNI 并没有规定必须将 dll 放在与 class 文件相同的目录,只要确保 JVM 能搜索到 DLL 即可)③。重新启动 Elipse 后,运行测试程序,将看到控制台输出“ Hello World !”

 

注意,③必须设置好 DLL 搜索路径,或者将 dll 拷贝到 C:/WINDOWS/system32 下面。这里,我折腾了不少时间,才搞定。

 

 

参考资料

Java Native Tutorial

 

 

9月20日补记

JNIEasy 1.1 发布了.



通常,在我们要进行本地调用,需要调用DLL,或者与硬件进行通讯的时候,我们不得不借助于JNI.



JNIEasy 就是为了整合DLL和c++ library与 Java 的一个工具..



JNIEasy 让我们避免编写繁琐以及容易出错的JNI 代码.... 使用了非常友好的Java语法..



JNIEasy 对于个人用户以及非营利用户都是免费的.对商业用户收费..



新版本开始支持Linux平台, 而之前的版本只是支持windows平台.



官方站点:

http://www.innowhere.com/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值