我需要使用 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)