【发布时间】:2011-01-02 14:34:35
【问题描述】:
我正在使用一个公开回调函数的非托管 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?
如果不是,还有哪些其他选项可以避免块复制? byte* 本质上是唯一的选择吗?
【问题讨论】:
-
执行此操作时,您将明确编写不安全的代码。不妨让它显而易见,使用 byte*。
标签: c# marshalling unmanaged