亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

c++調用java如何處理返回值

c++
小樊
81
2024-11-23 23:08:36
欄目: 編程語言

在C++中調用Java方法并處理返回值,可以使用Java Native Interface (JNI)

  1. 創建一個Java類,例如MyClass.java
public class MyClass {
    public int add(int a, int b) {
        return a + b;
    }
}
  1. 使用javac編譯Java類,并使用javah生成JNI頭文件:
javac MyClass.java
javah -jni MyClass
  1. 創建一個C++文件,例如main.cpp,并實現JNI函數:
#include <jni.h>
#include <iostream>
#include "MyClass.h"

JNIEXPORT jint JNICALL Java_MyClass_add(JNIEnv *env, jobject obj, jint a, jint b) {
    jclass cls = env->GetObjectClass(obj);
    jmethodID mid = env->GetMethodID(cls, "add", "(II)I");
    jint result = env->CallIntMethod(obj, mid, a, b);
    return result;
}

int main() {
    JavaVMOption options;
    JNIEnv *env;
    JavaVM *jvm;

    options.optionString = "-Djava.class.path=./";
    JNI_CreateJavaVM(&jvm, (void**)&env, &options);

    jclass cls = env->FindClass("MyClass");
    jmethodID mid = env->GetMethodID(cls, "add", "(II)I");

    jobject obj = env->NewObject(cls, nullptr, 5, 3);
    jint result = env->CallIntMethod(obj, mid, 5, 3);

    std::cout << "Result: " << result << std::endl;

    env->DeleteLocalRef(obj);
    env->DeleteLocalRef(cls);
    jvm->DestroyJavaVM();

    return 0;
}
  1. 編譯C++代碼并鏈接Java庫:
g++ -I${JAVA_HOME}/include -I${JAVA_HOME}/include/linux main.cpp -o main -L${JAVA_HOME}/jre/lib/amd64/server -ljvm
  1. 運行生成的可執行文件:
./main

輸出結果應為:

Result: 8

這個示例展示了如何在C++中調用Java方法并處理返回值。注意,這里的示例是針對Linux系統的,如果你使用的是Windows系統,需要相應地修改-I-L選項。

0
民丰县| 凤阳县| 高密市| 汕尾市| 乡城县| 兰州市| 永川市| 江都市| 精河县| 贵定县| 象山县| 错那县| 屏边| 衢州市| 壤塘县| 石首市| 娱乐| 依兰县| 万安县| 万山特区| 临江市| 罗源县| 威海市| 郸城县| 长葛市| 余姚市| 静乐县| 察雅县| 林周县| 万源市| 无棣县| 柳林县| 横山县| 枞阳县| 五峰| 北流市| 江西省| 勃利县| 龙州县| 巴林右旗| 伊吾县|