JNI: передача байтов из C ++ в Java - PullRequest
11 голосов
/ 06 июня 2011
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 Ответ

11 голосов
/ 06 июня 2011

Я думаю, что вы пропустили строку вроде:

(*env)-> SetByteArrayRegion(env, result, 0, size, fill);

проверить:

http://java.sun.com/developer/onlineTraining/Programming/JDCBook/jnistring.html

для более подробной информации

также на похожий вопрос ответили здесь

Как вернуть массив из JNI в Java?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...