C# から Java にバイト配列を渡しています。現在、私の C++ コードは次のようになっています。
sendDocument(array<byte> ^arr) //Called by C# class
{ ...
jbyteArray result = javaEnv->NewByteArray(arr->Length);
jbyte *bytes = javaEnv->GetByteArrayElements(result, 0);
for(int k = 0; k < arr->Length ; k++)
{
bytes[k] = arr[k];
}
... //Call Java method
}
どういうわけかコピー部分を省略できますか (または別の方法でパフォーマンスを向上させますか)?
編集: ポインタ作業でなんとかやり遂げました:
jbyteArray result = javaEnv->NewByteArray(arr->Length);
pin_ptr<unsigned char> pUnmanagedArr = &arr[0];
javaEnv->SetByteArrayRegion(result, 0, arr->Length, (jbyte*)pUnmanagedArr);
しかし、このアプローチはどれほど汚れていますか?