Marshal 中有多种方法可以将 AllocHGlobal
分配的原始缓冲区复制到 C# 数组或从 C# 数组复制。但我的问题是,我有两个缓冲区都是由 AllocHGlobal 分配的,我想简单地将一个缓冲区复制到另一个缓冲区。
var buffer1 = Marshal.AllocHGlobal(size);
var buffer2 = Marshal.AllocHGlobal(size);
nativeOpOn(buffer1);
SomeCopy(buffer1, buffer2, size);
我知道一种可能的解决方案是为 memcpy
P/Invoke 系统 C lib,但随后我必须编写不同的 P/Invoke 来支持 Windows、Linux 和 MacOS,因为它们可能有不同的P/调用东西。
最佳答案
如果您使用的是.Net 4.6或更高版本,则可以使用Buffer.MemoryCopy()
:
unsafe
{
Buffer.MemoryCopy(p1.ToPointer(), p2.ToPointer(), destSizeBytes, sourceBytesToCopy);
}
当然,这是不安全
。
关于c# - 我们如何复制两个均由 Marshal.AllocHGlobal 分配的缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35175162/