C # - повреждение буфера с Marshal.Copy () - PullRequest
2 голосов
/ 10 ноября 2009

Я получаю 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.

Есть идеи? Спасибо!

...