前言
-----------------------本前言来自网络--------------------------
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
-----------------------结束--------------------------
分享到:
相关推荐
完整的实现java跨平台调用C程序源码,包含JAVA源码和C源码以及编译后的demo dll。将dll放到jdk bin目录下,java 项目可以直接运行。若要修改dll可以,修改C源码后重新编译生成dll。该demo处理了多线程调用c,全局...
Java通过JNI调用DLL动态库,亲测试编写
问题描述: 在开发项目过程中,需要处理算法分析出来二进制流数据,并对数据解析处理转发。我们上层应用平台是使用java开发的...那现在上层应用面临的问题:访问java外部功能接口实现方式(即调用dll)怎么选择及实现?
[JAVA]使用JNI技术实现JAVA程序调用dll、[JAVA]使用JNI技术实现JAVA程序调用dll
这两天要弄个JAVA调用DLL,研究了一下有点绕, java部分要生成.h头文件,所以弄了个例子在这分享下 JAVA调用DLL完整步骤 步骤里包括java部分代码及vc写的DLL代码
在JAVA中如何通过JNI调用VC动态库,以及在如何在VC中调试
使用JNI,vs2010 生成dll, JSP中调用dll 中创建的工程和vs2010下用于生成dll的工程代码
我们知道,使用 JNI 调用 .dll/.so 共享类库是非常非常麻烦和痛苦的。 假如有一个现有的 .dll/.so 文件,假如使用 JNI 技术调用,我们首先需要另外使用 C 语言写一个 .dll/.so 共享库,使用 SUN 规定的数据结构替换 ...
springboot+jna/jni调用动态so/dll库
java通过jni调用dll动态链接库及创建dll动态链接库demo。
Java通过JNI调用C++接口,Demo文档描述(里面有代码),里面有Windows下调用版和linux下调用版,经本人亲自测试,可用。
NULL 博文链接:https://leesonhomme.iteye.com/blog/549034
里面是一个java使用JNI调用的实例,包含所有情况如结构体、指针等等
jni调用c++ delphi中的dll.
本资源包括JAVA工程,C++工程,C#dll测试工程
以MessageBox为引子介绍java通过JNI调用dll的事例 附介绍说明,十分实用
该软件主要是介绍,java如何调用才c++程序,并且如何在visaul c++中用命令行cl生成dll文件。
完整的展示了Java调用C++ API/dll示例程序. 说明如下: 1. mrSocketAPICInt是准备被java调用的API 2. mrSocketAPIJavaInt是java调用C++ api的中间层 3. mrSocketAPIJavaIntDemo是java程序,展示与C++ api如何对接。...
JAVA如何调用dll:用JNI调用C或C++动态联接库原来如此简单
研究了很久,终于初步搞定了jni问题,写了一个最简单的jni调用第三方的实例,dll建立的时候全部使用的空项目,为避免其他的干扰,参数传递也选最简单的int型,以便于大家初步了解jni