`

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++ 代码,实现 Java 与 native 代码的交互。 在本例中,我们将详细介绍如何使用 JNI 将 Java 代码与 C/C++ 代码集成,生成动态库,并加载到 Java 程序中。 JNI 概述 JNI 提供了一...

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

    JNI头文件和源代码生成器`javah`用于生成C/C++的头文件,这个头文件定义了Java类中的native方法对应的C/C++函数原型。 在这个DEMO中,我们看到有get()和set()两个方法,这些都是通过JNI调用C/C++实现的。在Java中,...

    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写的一个使用jni调用c/c++的dll

    标题中的"java写的一个使用jni调用c/c++的dll"意味着我们要创建一个Java项目,该项目包含一个或多个`native`方法,这些方法的实现将在C/C++中完成。接着,我们需要使用`javah`工具生成JNI头文件,这个头文件定义了...

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

    - Sample1.cpp和Sample1.h构成了C/C++端的实现,它们将被编译成动态链接库供Java调用。 通过以上步骤,我们可以看到,JNI允许Java和C/C++代码无缝集成,实现了跨语言的混合编程。这不仅扩展了Java的功能,还能利用...

    java调用C/C++全过程

    ### Java调用C/C++全过程详解 #### 一、引言 随着软件开发技术的不断发展,跨平台的应用程序越来越受到开发者的青睐。Java作为一种典型的跨平台编程语言,因其一次编写到处运行的特点而广受欢迎。然而,Java作为一...

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

    通过以上详细的步骤和技术要点,我们可以看到,无论是Java调用C/C++还是C/C++调用Java,都需要仔细地处理数据类型转换、异常处理以及性能优化等问题。掌握这些技术细节,对于开发高效稳定的跨语言应用程序至关重要。

    java调用C/C++的例子

    接下来,`BridgeWinJava.zip`可能包含了一个Windows平台下的Java调用C++的示例项目。这个项目可能包括: 1. **Windows特定的JNI实现**:可能涉及到Windows API的使用,如动态库加载函数LoadLibrary和GetProcAddress...

    java调用C/C++过程

    Java调用C/C++的过程,通常被称为JNI(Java Native Interface),是Java平台标准的一部分,它允许Java代码和其他语言写的代码进行交互。对于那些需要利用C或C++的高性能特性的Java开发者来说,JNI是一个重要的工具。...

    JAVA调用C/C++ DLL文件方法

    JAVA调用C/C++ DLL文件方法 JAVA 调用 C/C++ 库文件(DLL)是 Java 语言与 C/C++ 语言之间的交互方式之一。在 Java 中,存在多种调用 C/C++ 库文件的方式,包括 JNI、JNative、Jawin 和 Jacob 等。其中,JNI(Java ...

    使用C/C++实现Java的Native方法接口(JNI)/ JNI编程(C/C++) 代码实例

    本教程将详细介绍如何使用C/C++实现Java的Native方法接口,并通过代码实例来展示JNI编程的基本步骤。 1. **JNI简介** JNI是一种规范,它定义了Java虚拟机(JVM)和本地代码之间的接口。通过JNI,开发者可以在Java...

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

    2. **Java调用C/C++** - **本地方法接口**:Java代码通过`System.loadLibrary()`加载动态链接库(DLL或SO),然后通过`native`方法调用C/C++函数。 - **JNI函数注册**:C/C++代码需要使用`RegisterNatives()`函数...

    Java 调用C/C++程序

    总之,Java调用C/C++程序的能力通过JNI得以实现,这是一种强大的技术,使得Java应用能够充分利用本地系统的资源,同时也保留了Java的跨平台优势。虽然使用JNI会增加代码的复杂性,但其灵活性和性能提升对于许多项目...

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

    JNI允许Java代码和其他语言写的代码进行交互,包括调用C/C++编译的动态链接库(DLL)文件。下面将详细介绍如何使用JNI来调用DLL,并解释相关知识点。 1. **JNI简介** JNI是Java平台的标准部分,提供了一组接口,...

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

    ### JNI学习指南:Java调用C/C++接口详解 #### 一、引言 随着软件开发领域的不断发展,跨语言编程成为一种重要的技能。Java作为一种广泛使用的编程语言,因其跨平台特性和丰富的生态系统受到欢迎。然而,Java作为一...

    android NDK入门篇----混合使用java和c/c++代码 源码工程

    混合使用Java和C/C++代码时,我们通常会使用JNI(Java Native Interface)。JNI是Java平台的标准接口,它允许Java代码与其他语言编写的代码进行交互。在Android中,JNI被用来在Java层和C/C++层之间建立桥梁。创建一...

    android studio中使用ndk编译.so文件,调用C/C++代码(jni编程)

    在Android开发中,有时我们需要利用C或C++的高性能特性来编写特定...整个过程包括配置NDK、编写C/C++代码、在Java中声明和调用JNI函数,以及使用构建系统编译.so文件。熟悉这些步骤对于提升Android应用的性能至关重要。

    Android-JNI完整工程,实现c++调用java和java调用c++

    6. **Java调用C++**: - 通过调用之前声明的native方法,Java代码可以直接触发C++代码的执行。 7. **C++调用Java**: - 通过`JNIEnv`指针,C++可以查找并调用Java对象的方法,访问字段,甚至创建新的Java对象。 ...

    JNI(java调用C_C++代码)

    `System.loadLibrary("MyNative")`确保Java能识别并调用C/C++代码。 在实际开发中,需要注意以下几点: - JNI函数前缀`Java_`后面跟着类名、方法名和签名,这是Java虚拟机(JVM)识别本地方法的方式。 - 需要确保...

    android调用C/C++

    总结来说,Android调用C/C++主要涉及JNI的使用,包括本地方法声明、头文件生成、C/C++代码编写、库编译、Java调用等多个步骤。通过这个过程,开发者可以充分利用C/C++的性能优势来优化应用程序的关键部分。如果在...

Global site tag (gtag.js) - Google Analytics