我在使用JNI时遇到了问题,并且在此问题上停留了相当长时间。之前我曾发布过这方面的消息,但从未收到过答案,并且偶尔会进行大量的研究。在将jByteArray转换为.NET字节时出现问题[]
我JNI签名:
JNIEXPORT void JNICALL Java_MyApplet_invokeManager(JNIEnv *jniEnvPtr, jobject javaObj, jbyteArray encodedData)
我的一些代码:
boolean isCopy;
jbyte* bytes = jniEnvPtr->GetByteArrayElements(encodedData, &isCopy);
jniEnvPtr->ReleaseByteArrayElements(encodedData, bytes, JNI_ABORT);
myManager->ShowQueue(encodedData);
错误消息:
error C2664: 'MyModule::JniToManaged::ShowFormQueue' : cannot convert parameter 2 from 'jbyte *' to 'cli::array<Type,dimension> ^'
我发现没有办法将其转换为C#的字节[]我需要通过。我听说过投射jbyte *对象,但无法弄清楚如何将其转换为正确的格式。
您应该在转换结束时调用'ReleaseStringUTFChars',否则可能导致'jstring'对象被无限期地固定,导致内存碎片,或者C++副本被无限期保留,导致内存泄漏。 – GooseSerbus 2013-04-15 21:54:25
啊,感谢您的支持。我记得把它叫做jbytearray,只是忘了它的字符串。 – gwin003 2013-04-17 17:42:51