正确地将硬编码的byte []从JNI返回到Java

时间:2012-08-31 11:46:44

标签: java android java-native-interface native

我想在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'

任何快速帮助? :)

1 个答案:

答案 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};

希望这有帮助。