C++如何与Java进行交互?JNI在C++中的使用方法【跨语言编程】

admin 百科 10
JNI是Java定义的接口规范,C++作为实现方被Java调用;C++也可回调Java方法,但需JNIEnv*和JVM环境。

C++如何与Java进行交互?JNI在C++中的使用方法【跨语言编程】-第1张图片-佛山资讯网

Java 和 C++ 交互主要靠 JNI(Java Native Interface),它不是“C++ 调用 Java”,而是让 Java 虚拟机(JVM)能加载并调用 C++ 编写的本地函数——C++ 在这里扮演的是“被 Java 主动调用”的角色。反过来,C++ 也可以主动调用 Java 方法,但必须通过 JVM 环境(比如 AttachCurrentThread 或已存在的 JNIEnv*)。核心在于:JNI 是 Java 定义的接口规范,C++ 是实现方,不是对等通信协议。

1. 基础流程:从 Java 声明 native 到 C++ 实现

Java 端先声明一个 native 方法,并加载对应动态库:

public class Calculator {
    static {
        System.loadLibrary("calculator"); // 加载 libcalculator.so(Linux)或 calculator.dll(Windows)
    }
    public native int add(int a, int b);
}

登录后复制

C++ 端需按 JNI 命名规则实现函数(包名用下划线替换点,类名和方法名拼接):

#include <jni.h>
JNIEXPORT jint JNICALL Java_Calculator_add(JNIEnv *env, jobject obj, jint a, jint b) {
    return a + b;
}

登录后复制

  • 函数名必须严格匹配:Java_全限定类名_方法名,其中点号(.)全部换成下划线(_)
  • 前两个参数固定:JNIEnv*(操作 JVM 的句柄)、jobject(当前 Java 对象实例,静态方法中为 jclass)
  • 返回值和参数类型要用 JNI 类型(jint、jstring、jobject 等),不能直接用 int 或 char*

2. 在 C++ 中调用 Java 方法(正向回调)

如果 C++ 需要反过来调用 Java 的某个方法(比如通知结果、触发回调),需持有有效的 JNIEnv* 和目标 Java 对象引用(jobject)。

立即学习“Java免费学习笔记(深入)”;

标签: linux java js windows 编码 虚拟机 工具 ai amd c++ win

发布评论 0条评论)

还木有评论哦,快来抢沙发吧~