我们说我有一个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
,顺便说一句。)
答案 0 :(得分:1)
&#34; obj
甚至可能不是java对象&#34;
你几乎自己想出来了。它比这更强大。 Java有垃圾收集。仅仅因为这个原因,你知道obj
不是 java对象,而只是一个引用该对象的句柄,因为它在垃圾收集器中在内存中乱窜。
您现在可以看到问题的根本缺陷:&#34;获取java对象的内存地址&#34;假设你获得了有用的价值。但是,即使你能得到一个地址,从你获得它之后的第一个时钟提示也是不可靠的。