小编Lok*_*yak的帖子

JNI Java Wrapper:如何传递 byte[] 参数

我需要使用 JNI 从 C++ 调用 Java API。我试图通过一个byte*如下:

爪哇

void OperateData(byte[] data, int dataLength)
{
   //Some Implementation
}
Run Code Online (Sandbox Code Playgroud)

C++

void OperateData(byte* data, int dataLength)
{
    JavaMethod* methodObj = getMethod(_T("OperateData"));
    JNIEnv* jniEnv = JvmManager::GetInstance()->GetJNIEnv();
    jobject jBuffer = jniEnv->CallObjectMethod(m_javaObject->getJObject(), methodObj->getJMethodID(), (jobject)data, (jint)dataLength);
}
Run Code Online (Sandbox Code Playgroud)

这是行不通的。它正在抛出异常。你能告诉我我做错了什么吗?

更新:我根据建议修改了 C++ 代码,如下所示。我仍然有同样的问题。还有什么问题吗?

void OperateData(byte* data, int dataLength)
{
    JavaMethod* methodObj = getMethod(_T("OperateData"));
    JNIEnv* jniEnv = JvmManager::GetInstance()->GetJNIEnv();
    jbyteArray jBuff = jniEnv->NewByteArray(dataLength);
    jniEnv->SetByteArrayRegion(jBuff, 0, dataLength, (jbyte*)data);
    jobject jBuffer = jniEnv->CallObjectMethod(m_javaObject->getJObject(), methodObj->getJMethodID(), jBuff, (jint)dataLength);
    jniEnv->ReleaseByteArrayElements(jBuff,(jbyte*)data, 0);
}
Run Code Online (Sandbox Code Playgroud)

c++ java java-native-interface

-1
推荐指数
1
解决办法
677
查看次数

标签 统计

c++ ×1

java ×1

java-native-interface ×1