简体   繁体   English

JNI:将字节从 c++ 传递到 java

[英]JNI: passing bytes from c++ to 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);

problem is that byte array contains just null bytes in java side, does anyone have idea why?问题是字节数组在 java 端只包含 null 字节,有人知道为什么吗?

EDIT: oh my bad it should be SetByteArrayRegion, sorry: all working now :)编辑:哦,我的错,它应该是 SetByteArrayRegion,对不起:现在一切正常 :)

I think your missing a line like:我认为您缺少如下一行:

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

check out:查看:

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

for more details更多细节

also a similar question was answered here这里也回答了一个类似的问题

How to return an array from JNI to Java? 如何将数组从 JNI 返回到 Java?

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM