Я создаю плагин для Unity и посмотрел на этот ответ метод чтения байтовых данных из C ++ в C #: Передача байтового массива из неуправляемой dll C ++ в C # unity
Код C ++:
char DAQ_API* Read()
{
char Buffer[30];
PopulateArray(Buffer);
return Buffer;
}
int DAQ_API FreeMemory(char* arrayPtr)
{
if (arrayPtr != nullptr) {
delete[] arrayPtr;
}
return 0;
}
Код C #:
[DllImport("DAQ")]
private static extern IntPtr Read();
[DllImport("DAQ")]
public static extern int FreeMemory(IntPtr ptr);
В цикле обновления:
IntPtr ptr = Read();
byte[] packet = new byte[30];
Marshal.Copy(ptr, packet, 0, 30);
FreeMemory(ptr);
Размер байтового массива равен 30, а первые 8 байтов верны , а остальные выглядят как ненужные данные:
0 240 0 89 86 23 7 9 240 67 189 31 0 0 0 0 96 211 95 0 0 0 0 0 224 210 95 0 0 0
Что происходит, что приводит к неправильным данным для остальной части массива?