gpt4 book ai didi

c# - 是否可以从 IntPtr + 大小创建托管字节数组?

转载 作者:太空宇宙 更新时间:2023-11-03 18:45:40 25 4
gpt4 key购买 nike

我正在使用公开回调函数的非托管 API。此函数接收一个 IntPtr 和一个描述字节数组的整数。 API 希望我用数据填充它。

我想使用托管 byte[] 来填充该缓冲区。到目前为止,我一直这样做的方式是这样的:

public void MyCallback(IntPtr rawBufferPtr, int rawBufferLength)
{
var buffer = new byte[rawBufferLength];

<fill the buffer with whatever data I want>

Marshal.Copy(buffer, 0, rawBufferPtr, rawBufferLength);
}

是否可以避免 Marshal.Copy 并以某种方式分配 byte[] 以将数据直接存储在 rawBufferPtr 中?

如果不是,还有哪些其他选项可以避免 block 复制? byte* 本质上是唯一的选择吗?

最佳答案

您可以使用 Marshal.WriteXXX直接写入非托管缓冲区的函数系列。

例子:

Marshal.WriteByte(rawBufferPtr, <offset into buffer>, byteValue);

关于c# - 是否可以从 IntPtr + 大小创建托管字节数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4578809/

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