簡體   English   中英

如何調用Java函數,該函數在C ++程序中返回類的對象並接收該對象?

[英]How to call a java function which returns the object of a class in a c++ program and receive that object?

我試圖在c ++程序中調用java函數,該函數返回下面給出的類的對象:

class Test1   
{  
    int a;
    int b;
}

這是我的C ++代碼:

#include <iostream>
#include <jni.h>
#include <cstdlib>

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


JavaVMInitArgs vm_args;
JavaVMOption* options = new JavaVMOption[1];
options[0].optionString = "-Djava.class.path=/home/user";
vm_args.version = JNI_VERSION_1_6;
vm_args.nOptions = 1;
vm_args.options = options;
vm_args.ignoreUnrecognized = false;

jint rc = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);
delete options;
if (rc != JNI_OK)
{
    std::cin.get();
    exit(EXIT_FAILURE);
}

std::cout << "JVM load succeeded: Version ";
jint ver = env->GetVersion();
std::cout << ((ver>>16)&0x0f) << "."<<(ver&0x0f) << std::endl;


jclass cls2 = env->FindClass("Server11");
if(cls2 != nullptr)                 
{
    std::cout << "Class Server11 found" << std::endl;

    jmethodID mid = env->GetStaticMethodID(cls2, "myJavaFunction", "()LTest1;");
    if(mid != nullptr)
    {
        jobject obj = env->CallStaticObjectMethod(cls2, mid);

        // Now how to convert obj into Test1??
    }
}

jvm->DestroyJavaVM();
}

現在如何將其轉換為Test1類的對象? 還是我必須使用其他方法?

已編輯

我如何才能將類的對象作為參數傳遞並在Java部分上獲取該對象?

類是相同的:

class Test1   
{  
    int a;
    int b;
}

jmethodID mid = env->GetStaticMethodID(cls2, "myJavaFunction", "(/*WHAT SHOULD WRITE HERE*/)LTest1;");

解:

這是我如何獲取字段:

jobject obj = env->CallStaticObjectMethod(cls2, mid);
jclass jc = env->GetObjectClass(obj);
jfieldID jf = env->GetFieldID(jc, "a", "I");
jint a = env->GetIntField(obj, jf);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM