次のシグネチャを持つ C++ メソッドがあります。
int cppGetData(string& data);
Java メソッドから呼び出す必要があります。
バージョン I :
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);
これはひどいです。jniGetData
API署名とメソッドの複雑さの両方の観点から。
より良い方法はありますか?