【发布时间】:2017-11-13 09:36:25
【问题描述】:
假设我有一个 java 类
class NativeInterface{
public static native void access(Object obj);
}
而我要做的就是访问该对象的第二个字节(例如)。
即我想做这样的事情:
#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 甚至可能不是 java 对象。
(jobject 定义在 jni.h 中,我还没有弄清楚它的作用。)
那么我该怎么做呢?
(尝试这种幼稚的尝试将导致
error: initializer fails to determine size of ‘byte_array’
byte byte_array[] = obj;
^~~~
,顺便说一句。)
【问题讨论】:
-
你不能分配给一个数组,也不能用不同于数组初始化器的东西来初始化它!请查阅您的文档,
jobject到底是什么,char *objbytes = obj之类的东西可能会起作用。
标签: java c++ c pointers java-native-interface