我收到一个 IntPtr 和一个 int 指定它指向的字节数。数据可以包含任何字符,包括 null、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,但它们没有(我只是将相同的数据复制到另一个内存位置AFAIK)。但是,'ptr' 似乎指向任意内存位置,因为它包含对 DLL 模块的字符串引用。
有任何想法吗?谢谢!