中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

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
西贡区| 梅河口市| 黄大仙区| 南昌市| 万荣县| 无棣县| 绍兴市| 遂川县| 固安县| 武威市| 河源市| 山阴县| 洛阳市| 新竹市| 平和县| 怀集县| 丹棱县| 开江县| 平陆县| 锡林浩特市| 保德县| 徐州市| 漳州市| 敦化市| 平南县| 德昌县| 綦江县| 清远市| 淅川县| 扬州市| 浮山县| 昭通市| 卫辉市| 河东区| 重庆市| 茌平县| 额尔古纳市| 海晏县| 永城市| 兴仁县| 灌南县|