-3

我想在 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:错误:“->”的基本操作数具有非指针类型“_JNI​​Env”

NativeCodeCaller.cpp:215:78:警告:扩展初始化列表仅适用于 -std=c++0x 或 -std=gnu++0x

NativeCodeCaller.cpp:215:78:错误:无法在赋值中将“括号括起来的初始化列表>”转换为“jbyte*”

NativeCodeCaller.cpp:216:8:错误:“->”的基本操作数具有非指针类型“_JNI​​Env”

任何快速帮助?:)

4

1 回答 1

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

希望这可以帮助。

于 2012-08-31T12:00:13.513 回答