[英]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.