Я получаю IntPtr и int, указывающие количество байтов, на которые он указывает. Данные могут содержать любые символы, включая ноль, EOL и т. Д. При попытке выполнить следующие действия буфер поврежден:
//buffer is the IntPtr
//count is the number of bytes in 'buffer'
byte[] test = new byte[count];
Marshal.Copy(buffer, test, 0, count);
IntPtr ptr = IntPtr.Zero;
ptr = Marshal.AllocCoTaskMem(count);
Marshal.Copy(test, 0, ptr, count);
Я бы предположил, что 'buffer' и 'ptr' будут указывать на один и тот же буферный BLOB-объект в разных ячейках памяти, но они этого не делают (я просто копирую те же данные в другую ячейку mem AFAIK). Однако «ptr» указывает на произвольную ячейку памяти, поскольку содержит строковые ссылки на модули DLL.
Есть идеи? Спасибо!