`

JNI(Java调用C/C++代码)

阅读更多

back>>

1. 首先在Java类中声明一个native方法
    //native关键字修饰的方法,其内容是C/C++编写的,java中不必为它编写具体的实现
    public native void sayHello();
   
2. 用java的工具javah.exe生成包含native方法定义的C/C++头文件
    - javah.exe在jdk的安装路径的bin目录下
    - 到native方法所在java文件生成的class文件路径下运行命令 javah 包名.类名
        以video1.TestNative为例,TestNative.class的路径为: C:\E\java\workspaces\myeclipseblue\JNITest\bin
    执行命令:C:\E\java\workspaces\myeclipseblue\JNITest\bin>javah video1.TestNative
    这样就会在C:\E\java\workspaces\myeclipseblue\JNITest\bin目录下产生一个video1_TestNative.h的C/C++头文件

3. 头文件中方法名的结构
    例:JNIEXPORT void JNICALL Java_video1_TestNative_sayHello(JNIEnv *, jobject);
    方法名Java_video1_TestNative_sayHello,以Java开头,以_分隔,依次为包名(包名之间也用下划线分隔)、类名、在java中声明的native方法名

4. 按照生成的C/C++头文件来写C/C++源文件
    VC++6.0下,新建一个win32 Dynamic-link Library 工程,工程名为NativeCode,路径为C:\Program Files\Microsoft Visual Studio\MyProjects\NativeCode
    将第二步生成的头文件video1_TestNative.h、jni.h、jni_md.h 拷贝到C:\Program Files\Microsoft Visual Studio\MyProjects\NativeCode下
    在VC++6.0中引入这些该头文件

    jni.h在C:\Program Files\Java\jdk1.6.0_14\include下,jni_md.h在C:\Program Files\Java\jdk1.6.0_14\include\win32

    编写C/C++源代码source.cpp

5 . 编译 source.cpp,生成动态 连接库NativeCode.dll

6. 将dll文件加入到环境变量path路径下。

    Eclipse启动后会加载环境变量Path,如果之后对path进行改变,Eclipse需要重启才能重新加载新的环境变量

7. java类中加载dll,然后调用声明的native方法
    java类中加载dll:System.loadLibrary("NativeCode");

 

    完整的java代码

public class TestNative {
	//native关键字修饰的方法,其内容是C/C++编写的,java中不必为它编写具体的实现
	public native void sayHello();
	public static void main(String[] args) {
		System.loadLibrary("NativeCode");
		new TestNative().sayHello();
	}
}

    C/C++代码 source.cpp文件:

#include "video1_TestNative.h"
#include <iostream>
using namespace std;
JNIEXPORT void JNICALL Java_video1_TestNative_sayHello(JNIEnv * env, jobject obj){
	cout<<"Hello Native Test !"<<endl;
}
 

 

分享到:
评论

相关推荐

    jni java调用c/c++

    通过jni完成java调用c/c++,包含c/c++生成Dll动态库

    JNI开发Java和C/C++互相传递List集合

    JNI开发Java和C/C++互相传递List集合, 可以参考: Java从C/C++获取List集合对象:https://blog.csdn.net/niuba123456/article/details/80994166 Java传递List集合对象到C/C++ ...

    java调用C/C++全过程

    java调用C/C++全过程 JAVA以其跨平台的特性深受人们喜爱,而又正由于它的跨平台的目的,使得它和本地机器的各种内部联系变得很少,约束了它的功能。解决JAVA对本地操作的一种方法就是JNI。  JAVA通过JNI调用本地...

    JNI DEMO:java jni技术 调用 c/c++ 的dll

    java 调用 dll 的方法,即JNI的使用,demo中有get()/set()方法,操作步骤详细,即使是没用过java的程序员按照步骤依然可以成功。

    JNI技术手册 c/c++调用java

    V. Eclipse+CDT+MinGW 进行JAVA调用C/C++ 34 一、 安装eclipse3.2。 34 二、 安装MinGW。 34 1、 下载MinGW 34 2、 安装 34 3、 安装版本 34 4、 选择安装的编译器 34 5、 选择安装路径,下一步 35 6、 等待下载...

    JNI学习指南(java 调用C/C++接口)

    如果你想知道怎样用java去本地调用C/C++接口,本文档应该是你需要的,特别对于无基础的朋友,无疑是很好的JNI入门指南,希望对你有帮助。

    JNI 教程 java与c/c++互相调用

    本教程主要讲解java中如何调用C/C++,C/C++中如何调用java,并带Demo和调试指南

    JNI实现C/C++与Android/JAVA相互调用

    Android JNI/NDK开发(2)JNI实现C/C++与Android/JAVA相互调用 http://blog.csdn.net/u014702653/article/details/71141423

    利用JNI实现Java调用C++库

    利用JNI技术实现Java中调用C++编写的函数库示例程序源码,并附上参考JNI文档。 详情见本人博客:Java学习之通过JNI调用C/C++编写的dll链接库(图文教程)(http://write.blog.csdn.net/postlist)

    Java JNI 调用C++ API/dll 示例程序

    完整的展示了Java调用C++ API/dll示例程序. 说明如下: 1. mrSocketAPICInt是准备被java调用的API 2. mrSocketAPIJavaInt是java调用C++ api的中间层 3. mrSocketAPIJavaIntDemo是java程序,展示与C++ api如何对接。...

    JNI实现java cpp相互调用

    C/C++中访问Java方法 C/C++中访问Java父类的方法 C/C++中访问/修改Java变量 Java中访问C/C++方法 Java中访问/修改C/C++变量 动态方式实现: C/C++中访问Java方法 C/C++中访问Java父类的方法 C/C++中访问/修改Java...

    JNI(java调用C_C++代码)

    JNI(java调用C_C++代码),参照了IBM的一些例子

    Java 调用C/C++程序

     JAVA通过JNI调用本地方法,而本地方法是以库文件的形式存放的(在WINDOWS平台上是DLL文件形式,在UNIX机器上是SO文件形式)。通过调用本地的库文件的内部方法,使JAVA可以实现和本地机器的紧密联系,调用系统级的...

    使用JNI进行混合编程:在Java中调用C/C++本地库

    NULL 博文链接:https://conkeyn.iteye.com/blog/1597188

    JNI实现最简单的JAVA调用C/C++代码

    主要介绍了JNI实现最简单的JAVA调用C/C++代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    android下用java调用c/c++实现jni

    上篇文章中已经介绍了,关于NDK开发环境的搭建,这里不做赘述。这篇文章主要是通过一个例子来说明如何通过eclispe自动生成.h头文件,适合初学者,详见http://write.blog.csdn.net/postedit/42144847

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

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

    java写的一个使用jni调用c/c++的dll

    NULL 博文链接:https://wuneng94zui.iteye.com/blog/1218725

    Android JNI开发入门之C/C++实现示例程序

    Android应用程序(APK)怎样通过JNI调用Native C/C++实现的共享库。Android系统的Java虚拟机为C和C++实现两套不同的API,本工程分别对其作出示例程序。并编译出libhelloworld.so/libhelloworldcpp.so共享库

    jni.zip_c调用java_java 调用 c++_安卓 JNI

    安卓平台jni调用技术,通过Java代码调用C/C++代码

Global site tag (gtag.js) - Google Analytics