Передача байтового массива из 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 ++?

3

Решение

Несколько вещей, которые вам нужно сделать с вашим текущим кодом:

1.Вы должны отправить размер массива плагину C ++ в другом параметре как UnholySheep упоминается.

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
}
}
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]