温馨提示×

c++调用java怎样传递参数

c++
小樊
81
2024-11-23 23:07:37
栏目: 编程语言

要在C++中调用Java方法并传递参数,您需要使用Java Native Interface (JNI)。JNI允许C++代码与Java代码进行交互。以下是一个简单的示例,展示了如何在C++中调用Java方法并传递参数。

首先,创建一个Java类,例如MyClass.java

public class MyClass {
    public String myMethod(String input) {
        return "Hello from Java! Input: " + input;
    }
}

接下来,使用javac编译此Java文件,并使用javah生成JNI头文件:

javac MyClass.java
javah -jni MyClass

现在,您可以编写一个C++文件(例如main.cpp),并使用生成的JNI头文件调用Java方法:

#include <iostream>
#include <jni.h>
#include "MyClass.h"

int main() {
    // 加载Java虚拟机
    JavaVM* jvm;
    JNIEnv* env;
    JavaVMOption options;
    options.optionString = "-Djava.class.path=./";
    JNI_CreateJavaVM(&jvm, (void**)&env, &options);

    // 获取Java类
    jclass cls = env->FindClass("MyClass");
    if (cls == nullptr) {
        std::cerr << "Cannot find class MyClass" << std::endl;
        return 1;
    }

    // 获取Java方法ID
    jmethodID mid = env->GetMethodID(cls, "myMethod", "(Ljava/lang/String;)Ljava/lang/String;");
    if (mid == nullptr) {
        std::cerr << "Cannot find method myMethod" << std::endl;
        return 1;
    }

    // 创建Java字符串参数
    jstring input = env->NewStringUTF("World");

    // 调用Java方法并获取结果
    jobject result = env->CallObjectMethod(cls, mid, input);

    // 将Java字符串转换为C++字符串
    const char* resultStr = env->GetStringUTFChars(result, nullptr);
    std::cout << "Result from Java method: " << resultStr << std::endl;

    // 释放资源
    env->ReleaseStringUTFChars(result, resultStr);
    env->DeleteLocalRef(result);
    env->DeleteLocalRef(cls);
    jvm->DestroyJavaVM();

    return 0;
}

编译并运行此C++文件:

g++ -o main main.cpp -I${JAVA_HOME}/include -I${JAVA_HOME}/include/linux -L${JAVA_HOME}/jre/lib/amd64/server -ljvm
./main

这将输出:

Result from Java method: Hello from Java! Input: World

这个示例展示了如何在C++中调用Java方法并传递字符串参数。您可以根据需要修改代码以传递其他类型的参数。

0