gpt4 book ai didi

c# - 将数据从 IntPtr 复制到 IntPtr

转载 作者:IT王子 更新时间:2023-10-29 04:16:04 25 4
gpt4 key购买 nike

我有两个 IntPtr 值指向一些 length 字节的数据区域。 length 可能有 200k 到 400k 的数量级。

int length = /* ..*/
IntPtr ptrSrc = /*.. */;
IntPtr ptrDst = /* .. */;

现在我想将数据从ptrSrc 复制到ptrDst。此代码工作正常:

byte[] data = new byte[length];
Marshal.Copy(ptrSrc, data, 0, length);
Marshal.Copy(data, 0, ptrDst, length);

但它的缺点是需要一个额外的临时(可能很大)数组。不幸的是,我在 .NET 框架中找不到用于直接从 IntPtr 复制到 IntPtrMarshal.Copy 变体,所以我正在寻找替代方案。

我对适用于 32 位 Windows 和 64 位 Windows 的解决方案很感兴趣。有什么建议吗?

最佳答案

您可以 P/Invoke 到适当的 C 函数中。这可能是最简单的方法。示例:

class Program
{
[DllImport("kernel32.dll", EntryPoint = "CopyMemory", SetLastError = false)]
public static extern void CopyMemory(IntPtr dest, IntPtr src, uint count);

static void Main()
{
const int size = 200;
IntPtr memorySource = Marshal.AllocHGlobal(size);
IntPtr memoryTarget = Marshal.AllocHGlobal(size);

CopyMemory(memoryTarget,memorySource,size);
}
}

关于c# - 将数据从 IntPtr 复制到 IntPtr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15975972/

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