在c / c ++中获取java对象的内存地址

时间:2017-11-13 09:36:26

标签: java c++ c pointers java-native-interface

我们说我有一个java类

#include<jni.h>
#include "NativeInterface.h"
#include <stdio.h>

using byte = unsigned char;

/*
* Class:     NativeInterface
* Method:    access
* Signature: (Ljava/lang/Object)V
*/
JNIEXPORT void JNICALL Java_NativeInterface_access(JNIEnv* env, jclass _obsolete, jobject obj){
    byte byte_array[] = obj;
    printf("%c",byte_array[2]);
}

我想做的就是访问该对象的第二个字节(例如)。

即。我想做这样的事情:

obj

现在显然,这不起作用。 jobject甚至可能不是java对象。 jni.h中定义了error: initializer fails to determine size of ‘byte_array’ byte byte_array[] = obj; ^~~~ ,但我还没弄清楚它是做什么的。)

那我该怎么做?

(尝试这种天真的尝试将导致

    scrollPercent = (s / (d - c) * 2);//twice fatser

,顺便说一句。)

1 个答案:

答案 0 :(得分:1)

&#34; obj甚至可能不是java对象&#34;

你几乎自己想出来了。它比这更强大。 Java有垃圾收集。仅仅因为这个原因,你知道obj 不是 java对象,而只是一个引用该对象的句柄,因为它在垃圾收集器中在内存中乱窜。

您现在可以看到问题的根本缺陷:&#34;获取java对象的内存地址&#34;假设你获得了有用的价值。但是,即使你能得到一个地址,从你获得它之后的第一个时钟提示也是不可靠的。