我有一个具有以下签名的 C++ 方法:
int cppGetData(string& data);
它应该从 Java 方法中调用。
第一版:
byte[] javaGetData();
null
如果cppGetData
返回非零返回码,则应该返回。
我知道我必须写这样的东西:
JNIEXPORT jbyteArray JNICALL jniGetData(JNIEnv * env, jobject thisObj)
(
string data;
if (cppGetData(data))
{
return NULL;
}
jbyteArray jData = env->NewByteArray(data.size());
env->SetByteArrayRegion(jData, 0, data.size(), (jbyte *)data.c_str());
return jData;
}
我的问题是我失去了cppGetData
. 另一方面,Java没有引用返回,所以我很困惑。如何返回byte[]
整数状态?
当然,我可以有一个包装器,像这样:
public class ByteArrayWrapper{
public byte[] bytes;
}
然后 javaGetData 变成:
int javaGetData(ByteArrayWrapper wrapper);
这太可怕了。就 API 签名和jniGetData
方法复杂性而言。
有没有更好的办法?