我想在JNI中对16字节数组进行硬编码并使用方法返回它。
这不起作用
static jbyteArray JNICALL getKeyBytes(JNIEnv *env, jobject thiz)
{
F_LOG;
Mutex::Autolock _m(sLock);
jbyteArray result;
jbyte* resultType = new jbyte[16];
result = (*env)->NewByteArray(env, 16); //line 214
resultType = {52, 14, 25, 32, 75, 83, 35, 89, 40, 69, 35, 73, 84, 82, 35, 30};
(*env)->SetByteArrayRegion(env, result, 0, 16, resultType);
delete [] resultType;
return result;
}
我收到以下错误
NativeCodeCaller.cpp:214:17:错误:' - >'的基本操作数有非指针类型'_JNIEnv'
NativeCodeCaller.cpp:215:78:警告:扩展初始化程序列表仅适用于-std = c ++ 0x或-std = gnu ++ 0x
NativeCodeCaller.cpp:215:78:错误:无法转换“大括号括起初始化列表>”分配给'jbyte *'
NativeCodeCaller.cpp:216:8:错误:' - >'的基本操作数有非指针类型'_JNIEnv'
任何快速帮助? :)
答案 0 :(得分:1)
错误base operand of '->' has non-pointer type
表示您应该使用.
代替->
。
因此,您使用(*env).NewByteArray(env, 16);
还是env->NewByteArray(env, 16);
。第216行也是如此。
在下一行(215)中还有另一个错误cannot convert "brace-enclosed initializer list>" to 'jbyte*' in assignment
,因为赋值的括号语法仅在声明数组/指针的地方有效(我认为它也取决于编译器,但是我不确定。)
你应该尝试:
jbyte resultType[16] = {52, 14, 25, 32, 75, 83, 35, 89, 40, 69, 35, 73, 84, 82, 35, 30};
希望这有帮助。