我有一组在我的工作中需要在 C/C++ 中运行的 java 类。
而且,由于我对 java 还很陌生,所以我一步一步来。我已经能够使用字符串、int double 等调用 java,但最终结果将是返回一个字节数组(一个 pdf 文档),所以我尝试发回一个简单的两元素字节数组。
这是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.