C++通过jni调用Java中emo类的STATIC INT型函数A(),并获取返回值,然后打印返回值
时间: 2024-02-01 18:14:16 浏览: 135
C++调用java代码的JNI实现
下面是一个简单的示例代码,可以通过 JNI 调用 Java 中 emo 类的静态 int 型函数 A(),并获取返回值,然后将返回值打印出来:
```c++
#include <jni.h>
#include <iostream>
using namespace std;
int main() {
JavaVM *jvm; // Java 虚拟机实例
JNIEnv *env; // JNI 环境指针
JavaVMInitArgs vm_args; // Java 虚拟机初始化参数
JavaVMOption options[1]; // Java 虚拟机启动选项
jclass cls; // Java 类
jmethodID mid; // Java 方法 ID
jint result; // 返回值
// 设置 Java 虚拟机启动选项
options[0].optionString = "-Djava.class.path=./"; // 设置类路径
vm_args.version = JNI_VERSION_1_6; // 设置 JNI 版本
vm_args.nOptions = 1;
vm_args.options = options;
vm_args.ignoreUnrecognized = JNI_TRUE;
// 创建 Java 虚拟机实例
jint res = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);
if (res != JNI_OK) {
cout << "Error: Could not create Java VM." << endl;
return 1;
}
// 获取 Java 类
cls = env->FindClass("emo");
if (cls == nullptr) {
cout << "Error: Could not find Java class." << endl;
return 1;
}
// 获取 Java 方法 ID
mid = env->GetStaticMethodID(cls, "A", "()I");
if (mid == nullptr) {
cout << "Error: Could not find Java method." << endl;
return 1;
}
// 调用 Java 方法
result = env->CallStaticIntMethod(cls, mid);
// 打印返回值
cout << "Result: " << result << endl;
// 销毁 Java 虚拟机实例
jvm->DestroyJavaVM();
return 0;
}
```
其中,假设 Java 类名为 emo,静态 int 型函数名为 A(),并且将类文件放在当前目录下。在程序中需要将类路径设置为当前目录。
注意,这里使用的是 C++11 标准,如果使用的是早期的 C++ 标准,字符串字面量需要使用 char* 类型。
阅读全文