将字节数组从Unity C#传递到C ++插件

我正在尝试将Texture2D(字节数组)中的原始纹理数据传递给非托管C ++代码。 在C#代码中,数组长度约为1.5kk,但在C ++中,“sizeof”总是返回8。

本机方法的C#声明:

[DllImport("LibName", CallingConvention = CallingConvention.Cdecl)] static extern IntPtr ProcessData(byte[] data); 

C ++:

 extern "C" { __declspec(dllexport) void ProcessData(uint8_t *data) { //sizeof(data) is always 8 } } 

我究竟做错了什么? 有没有办法在C ++代码中传递数组而无需额外的内存分配?

您当前的代码需要做的事情很少:

1.你必须像UnholySheep所提到的那样,将数组的大小发送到另一个参数中的C ++插件。

2.在将数组发送到C ++端之前,还必须将数组固定。 这是使用fixed关键字或GCHandle.Alloc函数完成的。

3.如果C ++函数具有void返回类型,则C#函数也应该具有void返回类型。

以下是您的代码的更正版本。 不执行额外的内存分配。

C#:

 [DllImport("LibName", CallingConvention = CallingConvention.Cdecl)] static extern void ProcessData(IntPtr data, int size); public unsafe void ProcessData(byte[] data, int size) { //Pin Memory fixed (byte* p = data) { ProcessData((IntPtr)p, size); } } 

C ++:

 extern "C" { __declspec(dllexport) void ProcessData(unsigned char* data, int size) { //sizeof(data) is always 8 } }