gpt4 book ai didi

c# - 我们如何复制两个均由 Marshal.AllocHGlobal 分配的缓冲区?

转载 作者:行者123 更新时间:2023-12-01 18:54:02 26 4
gpt4 key购买 nike

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com