JNI: передача байтов из С++ в java
HANDLE hFile = CreateFileA("C:\\myfile.zip", GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
const int size = GetFileSize(hFile, NULL);
char* buffer = new char[size];
DWORD read;
ReadFile(hFile, buffer, size, &read, NULL);
jclass cls = ...;
jmethodID id = ...;
jbyteArray arr = env->NewByteArray(size);
env->GetByteArrayRegion(arr, 0, size, (jbyte*) buffer);
env->CallStaticVoidMethod(cls, id, arr);
Проблема
заключается в том, что массив байтов содержит только нулевые байты в java-стороне, у кого-нибудь есть идея, почему?
РЕДАКТИРОВАТЬ: о, мой плохой должен быть SetByteArrayRegion, извините! все работающие сейчас:)
Ответы
Ответ 1
Я думаю, что у вас отсутствует строка вроде:
(*env)-> SetByteArrayRegion(env, result, 0, size, fill);
проверить:
http://java.sun.com/developer/onlineTraining/Programming/JDCBook/jnistring.html
для более подробной информации
также был задан аналогичный вопрос.
Как вернуть массив из JNI в Java?