java - 如何使用 JNI 在 C++ 中访问 Java 类的元素
问题描述
我的任务是使用 JNI 在 C++ 中打印 Java 类中的元素值。但我不知道从哪里开始。
这是 C++ 代码:
#include "sample1.h"
JNIEXPORT void JNICALL Java_sample_methodCall
(JNIEnv *env, jobject jobj, jobject obj)
{
jclass cls = env->FindClass("sample1");
}
int main()
{
return 0;
}
这是Java代码:
import java.util.*;
public class sample1
{
String name="XYZ";
public native void methodCall(sample1 obj);
public static void main(String args[])
{
sample1 s = new sample1();
s.methodCall(s);
}
}
解决方案
C++ 代码
#include "sample2.h"
JNIEXPORT void JNICALL Java_sample2_callMethod(JNIEnv *env, jobject obj, jobject jobj)
{
jclass jcls;
jfieldID fid, fname;
jint i;
jstring str;
jcls = env->GetObjectClass(jobj);
fid = env->GetFieldID(jcls,"val","I");
fname = env->GetFieldID(jcls,"name","Ljava/lang/String;");
str = (jstring)env->GetObjectField(jobj, fname);
const char *nameUCpp = env->GetStringUTFChars(str, 0);
i = env->GetIntField(jobj, fid);
printf("%d %s", i, nameUCpp);
env->ReleaseStringUTFChars(str, nameUCpp);
}
int main()
{
return 0;
}
Java 代码
import java.io.*;
public class sample2
{
public native void callMethod(sample2 s);
int val=7;
String name="Siva";
public static void main(String args[])
{
System.loadLibrary("sample2");
sample2 s = new sample2();
s.callMethod(s);
}
}
推荐阅读
- css - 如果浏览器不支持某种文件类型,有没有办法在 CSS 中创建后备图像?
- pandas - 在熊猫数据框中按字符值保留分组
- git - 关于 Git 工作分支是从 dev 合并的,一些文件/代码在合并后被删除/擦除
- html - 除非我刷新页面,否则字体无法正确加载
- reactjs - 试图弄清楚将其从组件转换为 ReactJS 中的函数,但我被卡住了
- typescript - 通过打字稿声明全局类型是行不通的
- windows - 为什么 OSX 和 Windows 导入我的 .pfx 文件的方式不同?
- css - 浏览器更改 H 标签中的字体粗细
- python - 如何将两个字典合并为一个
- sql - 在多对多 SQL 表上精确匹配的 Where 语句