簡體   English   中英

將字節數組從Unity C#傳遞到C ++插件

[英]Pass byte array from Unity C# to C++ plugin

我正在嘗試將原始紋理數據從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
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM