精华帖 (0) :: 良好帖 (0) :: 新手帖 (1) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-01-11
前言 -----------------------本前言来自网络-------------------------- JNI技术的出现主要是基于三个方面的应用需求: 1. 解决性能问题 2. 解决本机平台接口调用问题 3. 嵌入式开发应用
下面动手来实现使用Jni调用本地方法,本实例演示 Java 调用 Native 本地方法传递参数并且返回结果。具体内容如下:
第一步:编写Java端代码 定义一个Java类 ---------------------------------------------- public class TestNativeDemo { // 声明本地方法 public native String testJni(String arg); static { // 加载DLL文件 System.loadLibrary("TestNativeDemoCPP"); } public static void main(String args[]) { TestNativeDemo ob = new TestNativeDemo(); // 调用本地方法 String result = ob.testJni("Hello,Jni"); // call a native method System.out.println("TestNativeDemo.testJni=" + result); } }
----------------------------------------------
编译之后在生成TestNativeDemo.class的bin目录下执行javah TestNativeDemo命令生成头文件TestNativeDemo.h ---------------------------------------------- /* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class TestNativeDemo */
#ifndef _Included_TestNativeDemo //避免重复包含头文件
#define _Included_TestNativeDemo
#ifdef __cplusplus //c++编译环境中才会定义__cplusplus
extern "C" { //告诉编译器下面的函数是c语言函数(因为c++和c语言对函数的编译转换不一样,主要是c++中存在重载)
#endif
/*
* Class: TestNativeDemo
* Method: testJni
* Signature: (Ljava/lang/String;)Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_TestNativeDemo_testJni
(JNIEnv *, jobject, jstring);
#ifdef __cplusplus
}
#endif
#endif
----------------------------------------------
第二步:生成DLL库 1. 打开VS2008,创建一个名称为TestNativeDemoCpp的C++ Win32项目。在向导的应用程序类型处选择DLL,点完成。设置Release+Win32编译配置。 2. 将签名生成的TestNativeDemo.h文件拷贝到TestNativeDemoCpp项目的根目录下,然后在VS中右键头文件文件夹添加现有项把这个头文件包含进来,接下来就是编辑TestNativeDemoCpp.cpp文件。 ---------------------------------------------- ---------------------------------------------- 3. VS开发环境默认不会识别jni.h头文件,在JDK中找到jni.h,并添加jni.h所在目录到当前工作路径:右键项目,属性-通用属性-C/C++-常规项在右边的附加包含目录中把%JAVA_HOME%/include和%JAVA_HOME%/include/win32加进来。 4. 右键项目的资源文件加入资源-版本信息。编译项目,在项目的Release下面找到TestNativeDemoCpp.dll文件,也有可能在项目的上层目录的release下边,跟设置有关。
第三步:运行Java调用DLL程序 把第二步产生的TestNativeDemoCpp.dll文件拷贝到第一步产生TestNativeDemo.class的同一目录。 执行命令:java TestNativeDemo 输出:Hello,JniTestNativeDemo.testJni=Hello,Jni
-----------------------结束-------------------------- 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2012-02-07
正需要,如果能说明执行过程就更佳了。
|
|
返回顶楼 | |
发表时间:2012-02-09
review the java native interface specification
|
|
返回顶楼 | |
发表时间:2012-02-10
如何调用一个现有的dll呢?
|
|
返回顶楼 | |
发表时间:2012-02-12
用JNA吧,感觉比jni方便多了
|
|
返回顶楼 | |
发表时间:2012-05-09
以前一个朋友的项目用了JNA;据反映,效率还不错。
|
|
返回顶楼 | |
浏览 6153 次