T
Tom21
Gast
Hallo Leute,
Habe ein Problem mit der Realisierung von JNI.
Ich möchte einer C Funktion einfach einen Zeiger auf eine Variable x, die ich in Java angelegt habe übergeben.
Die C-Funktion soll dann einfach auf die Variable x direkt schreiben. Bei einem Array als Parameter funktioniert es gut.
In Java lege Ich ein Array an und übergebe es der Funktion:
Nach dem Aufruf, ist der recvBuffer dann gefüllt.
Doch wie schaffe ich es, dass ich eine Variable
in Java definiere, Der C-Funktion eine Referenz zu recvLength übergebe und die C-Funktion dann dass Ergebnis in die Variable recvLength schreibt. wie bei dem recvBuffer[].
Ich hoffe ich konnte mein Problem rüberbringen
Habe ein Problem mit der Realisierung von JNI.
Ich möchte einer C Funktion einfach einen Zeiger auf eine Variable x, die ich in Java angelegt habe übergeben.
Die C-Funktion soll dann einfach auf die Variable x direkt schreiben. Bei einem Array als Parameter funktioniert es gut.
Code:
JNIEXPORT jint JNICALL Java_jni_JNIinterface_test_read
(JNIEnv *env, jclass cls, jbyte address, jbyteArray recvBuffer, jshort recvLength){
unsigned char* cRecvBuffer;
unsigned short* crecvLength = (unsigned short*)malloc(sizeof(uint16_t));
jint errorcode = 1;
jboolean isCopy;
cRecvBuffer = (unsigned char*)env->GetByteArrayElements(recvBuffer, &isCopy);
errorcode = (jint)test_read((uint8_t)address, cRecvBuffer, crecvLength);
env->SetByteArrayRegion(recvBuffer, 0,(jsize) *crecvLength, (jbyte *)cRecvBuffer);
free(crecvLength);
return errorcode;
}
In Java lege Ich ein Array an und übergebe es der Funktion:
Code:
byte[] recvBuffer = new byte[16];
short recvLength= 0;
System.out.println(JNIinterface.test_read((byte)0x03, recvBuffer, recvLength));
Nach dem Aufruf, ist der recvBuffer dann gefüllt.
Doch wie schaffe ich es, dass ich eine Variable
Code:
short recvLength
Ich hoffe ich konnte mein Problem rüberbringen