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++ 代码,实现 Java 与 native 代码的交互。 在本例中,我们将详细介绍如何使用 JNI 将 Java 代码与 C/C++ 代码集成,生成动态库,并加载到 Java 程序中。 JNI 概述 JNI 提供了一...
JNI头文件和源代码生成器`javah`用于生成C/C++的头文件,这个头文件定义了Java类中的native方法对应的C/C++函数原型。 在这个DEMO中,我们看到有get()和set()两个方法,这些都是通过JNI调用C/C++实现的。在Java中,...
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项目,该项目包含一个或多个`native`方法,这些方法的实现将在C/C++中完成。接着,我们需要使用`javah`工具生成JNI头文件,这个头文件定义了...
- Sample1.cpp和Sample1.h构成了C/C++端的实现,它们将被编译成动态链接库供Java调用。 通过以上步骤,我们可以看到,JNI允许Java和C/C++代码无缝集成,实现了跨语言的混合编程。这不仅扩展了Java的功能,还能利用...
### Java调用C/C++全过程详解 #### 一、引言 随着软件开发技术的不断发展,跨平台的应用程序越来越受到开发者的青睐。Java作为一种典型的跨平台编程语言,因其一次编写到处运行的特点而广受欢迎。然而,Java作为一...
通过以上详细的步骤和技术要点,我们可以看到,无论是Java调用C/C++还是C/C++调用Java,都需要仔细地处理数据类型转换、异常处理以及性能优化等问题。掌握这些技术细节,对于开发高效稳定的跨语言应用程序至关重要。
接下来,`BridgeWinJava.zip`可能包含了一个Windows平台下的Java调用C++的示例项目。这个项目可能包括: 1. **Windows特定的JNI实现**:可能涉及到Windows API的使用,如动态库加载函数LoadLibrary和GetProcAddress...
Java调用C/C++的过程,通常被称为JNI(Java Native Interface),是Java平台标准的一部分,它允许Java代码和其他语言写的代码进行交互。对于那些需要利用C或C++的高性能特性的Java开发者来说,JNI是一个重要的工具。...
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编程的基本步骤。 1. **JNI简介** JNI是一种规范,它定义了Java虚拟机(JVM)和本地代码之间的接口。通过JNI,开发者可以在Java...
2. **Java调用C/C++** - **本地方法接口**:Java代码通过`System.loadLibrary()`加载动态链接库(DLL或SO),然后通过`native`方法调用C/C++函数。 - **JNI函数注册**:C/C++代码需要使用`RegisterNatives()`函数...
总之,Java调用C/C++程序的能力通过JNI得以实现,这是一种强大的技术,使得Java应用能够充分利用本地系统的资源,同时也保留了Java的跨平台优势。虽然使用JNI会增加代码的复杂性,但其灵活性和性能提升对于许多项目...
JNI允许Java代码和其他语言写的代码进行交互,包括调用C/C++编译的动态链接库(DLL)文件。下面将详细介绍如何使用JNI来调用DLL,并解释相关知识点。 1. **JNI简介** JNI是Java平台的标准部分,提供了一组接口,...
### JNI学习指南:Java调用C/C++接口详解 #### 一、引言 随着软件开发领域的不断发展,跨语言编程成为一种重要的技能。Java作为一种广泛使用的编程语言,因其跨平台特性和丰富的生态系统受到欢迎。然而,Java作为一...
混合使用Java和C/C++代码时,我们通常会使用JNI(Java Native Interface)。JNI是Java平台的标准接口,它允许Java代码与其他语言编写的代码进行交互。在Android中,JNI被用来在Java层和C/C++层之间建立桥梁。创建一...
在Android开发中,有时我们需要利用C或C++的高性能特性来编写特定...整个过程包括配置NDK、编写C/C++代码、在Java中声明和调用JNI函数,以及使用构建系统编译.so文件。熟悉这些步骤对于提升Android应用的性能至关重要。
6. **Java调用C++**: - 通过调用之前声明的native方法,Java代码可以直接触发C++代码的执行。 7. **C++调用Java**: - 通过`JNIEnv`指针,C++可以查找并调用Java对象的方法,访问字段,甚至创建新的Java对象。 ...
`System.loadLibrary("MyNative")`确保Java能识别并调用C/C++代码。 在实际开发中,需要注意以下几点: - JNI函数前缀`Java_`后面跟着类名、方法名和签名,这是Java虚拟机(JVM)识别本地方法的方式。 - 需要确保...
总结来说,Android调用C/C++主要涉及JNI的使用,包括本地方法声明、头文件生成、C/C++代码编写、库编译、Java调用等多个步骤。通过这个过程,开发者可以充分利用C/C++的性能优势来优化应用程序的关键部分。如果在...