JNI
是Java Name Interface 的缩写,这个很重要,看到这个就知道这是干什么的。
用JNI主要是解决Java调用DLL库文件的问题。
具体的下面做详细说明:
首先配置java(这个就不多说了)
在来检查一下JNI是否好用 cmd——javah
好了我们开始编写简单的代码来说明这个JNI到底怎么用:
package test;
public class TestJNI {
public native void displayHelloWorld();
static {
System.loadLibrary("JNITest");
}
public static void main(String[] args) {
new TestJNI().displayHelloWorld();
}
}
以上是基本的代码,我们知道java 是运行在虚拟机上的,那么DLL是面对操作系统的,这个就麻烦了,因为在不同层,但java有一个关键字native,聪明的sun公司它是用来解决这个问题。
好了我们编译上面的文件然后在cmd中输入 javah –o 生成后的名字 –classpath 需要的jar java类名
例子:
javah -o testJNI.h test.TestJNI
文件生成了
/* DO NOT EDIT THIS FILE - it is machine generated */
#include "jni.h"
/* Header for class test_TestJNI */
#ifndef _Included_test_TestJNI
#define _Included_test_TestJNI
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: test_TestJNI
* Method: displayHelloWorld
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_test_TestJNI_displayHelloWorld
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
好了我们实现一下 上面的东西然后看看能不能有东西出来:
1. 创建一个C++ Class library工程
2. 最佳3个头文件jni.h,jni_md.h,test_TestJNI.h
3. 实现方法
// This is the main DLL file.
#include "stdafx.h"
#include "jni.h"
#include "test_TestJNI.h"
JNIEXPORT void JNICALL Java_test_TestJNI_displayHelloWorld
(JNIEnv *evn, jobject jobj)
{
printf("Hello World");
}
好了以上就好了
下面我们将生成的DLL放到Java工程根目录下
出项 Hello World 实现成功(Success)
分享到:
相关推荐
Java通过JNI调用DLL动态库,亲测试编写
完整的实现java跨平台调用C程序源码,包含JAVA源码和C源码以及编译后的demo dll。将dll放到jdk bin目录下,java 项目可以直接运行。若要修改dll可以,修改C源码后重新编译生成dll。该demo处理了多线程调用c,全局...
这两天要弄个JAVA调用DLL,研究了一下有点绕, java部分要生成.h头文件,所以弄了个例子在这分享下 JAVA调用DLL完整步骤 步骤里包括java部分代码及vc写的DLL代码
在JAVA中如何通过JNI调用VC动态库,以及在如何在VC中调试
完整的展示了Java调用C++ API/dll示例程序. 说明如下: 1. mrSocketAPICInt是准备被java调用的API 2. mrSocketAPIJavaInt是java调用C++ api的中间层 3. mrSocketAPIJavaIntDemo是java程序,展示与C++ api如何对接。...
JAVA如何调用dll:用JNI调用C或C++动态联接库原来如此简单
[JAVA]使用JNI技术实现JAVA程序调用dll、[JAVA]使用JNI技术实现JAVA程序调用dll
本资源包括JAVA工程,C++工程,C#dll测试工程
Java通过JNI调用C++接口,Demo文档描述(里面有代码),里面有Windows下调用版和linux下调用版,经本人亲自测试,可用。
问题描述: 在开发项目过程中,需要处理算法分析出来二进制流数据,并对数据解析处理转发。我们上层应用平台是使用java开发的...那现在上层应用面临的问题:访问java外部功能接口实现方式(即调用dll)怎么选择及实现?
NI调用IC卡读卡器的DLL,既支持64位程序也支持32位程序, 调用也非常方便,下面将介绍JNI调用IC卡读卡器DLL的方式
假如有一个现有的 .dll/.so 文件,假如使用 JNI 技术调用,我们首先需要另外使用 C 语言写一个 .dll/.so 共享库,使用 SUN 规定的数据结构替换 C 语言的数据结构,调用已有的 ? dll/so 中公布的函数。 然后再在 Java...
JAVA如何调用dll:用JNI调用C或C++动态联接库原来如此简单
里面是一个java使用JNI调用的实例,包含所有情况如结构体、指针等等
以MessageBox为引子介绍java通过JNI调用dll的事例 附介绍说明,十分实用
springboot+jna/jni调用动态so/dll库
java通过jni调用dll动态链接库及创建dll动态链接库demo。
利用JNI技术实现Java中调用C++编写的函数库示例程序源码,并附上参考JNI文档。...详情见本人博客:Java学习之通过JNI调用C/C++编写的dll链接库(图文教程)(http://write.blog.csdn.net/postlist)
该软件主要是介绍,java如何调用才c++程序,并且如何在visaul c++中用命令行cl生成dll文件。
提供java jni示例程序,linux so工程,windows dll工程,将科大讯飞语音合成程序封装成windows支持的dll和linux支持的so并且导出api,java使用jni直接调用。代码均已编译测试通过,需要appid和mscdll则可以自己去...