0

我正在将一个字节数组从 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);

但是这种方法有多脏?

4

1 回答 1

1

我认为这是复制数据的好方法。唯一pin_ptr不妥的是您使用的类型参数在文本上与使用的类型参数arr不同——但没有真正的区别。

您省略了提供处理的代码部分,javaEnv因此请确保调用的线程已sendDocument使用 JVM 初始化和未初始化(即使用AttachCurrentThreadand DetachCurrentThread, or JNI_CreateJavaVMand DestroyJavaVM)。

于 2013-07-17T14:42:46.700 回答