java - 如何使用 JNI 在 C++ 中访问 java 类的元素

标签 java c++ java-native-interface

<分区>

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

}  

关于java - 如何使用 JNI 在 C++ 中访问 java 类的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56631440/

相关文章:

java - SQL - java中的转义字符

c++ - 是否定义了标准库异常抛出的消息?

tomcat - JNI dll 文件在 tomcat 外部执行良好。但不在 tomcat 中运行,即使我将 dll 文件放入 tomcat/bin 中而不使用像 eclipse 这样的 ide

c++ - 如何使用NDK?从 'hello world' 应用程序开始

java - Java 中的持久数据结构

java - 为什么JFrame的这个函数执行了两次?

java - 异步任务,此标记后预期的维度

c++ - 提升.MultiIndex : Are there way to share object between two processes?

c++ - Near 和 Far 指针

java - 在 Android Ndk 中用 C 创建 java 对象