仕事で C/C++ で実行する必要がある一連の Java クラスがあります。
そして、私はJavaにかなり慣れていないので、一度に一歩ずつ進めています。string、int double などで Java を呼び出せるようになりましたが、最終結果はバイト配列 (pdf ドキュメント) を取得することになるので、単純な 2 要素のバイト配列を送信してみました。
ここにJavaがあります:
public class ReturnData
{
int returnValue;
String Log;
Byte[] data = new Byte[2];
public ReturnData(int nRetVal, String szLog)
{
this.data[0] = 100;
this.data[1] = 12;
this.returnValue = nRetVal;
this.Log = szLog;
}
}
そして、これがc ++コードです(JNIの初期化が削除されました。単純な型で機能するため...)
jbyteArray jbyteData = (jbyteArray)jniEnvironment->GetObjectField(jobjRetData,
jniEnvironment->GetFieldID(clsReturn, "data", "Ljava/lang/ByteArray;"));
そして今、次のような jbyteData 要素にいつでもアクセスできます。
jsize len = jniEnvironment->GetArrayLength(jbyteData);
例外が発生します
System.AccessViolationException was unhandled
Message: Attempted to read or write protected memory. This is often an indication that other
memory is corrupt.