我接到一项任务,要使用 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);
}
}