我们在C#中调用C++dll时,会遇到接收到来自C++dll的数据回调,回调可以向如下定义。问题来了,如何产看ref byte pBuff所指向内存内容呢,pBuff只能看到第一个byte。
通过如下转换既能实现如何实现ref byte转byte[]。(也可以修改回调类型为Intptr,IntPtr->byte[])
public int Callback(int iHandle, int iType, ref byte pBuff, int iSize, IntPtr pUserData)
{
byte[] buf = new byte[iSize];
unsafe
{
fixed (byte* p = &pBuff)
{
using (UnmanagedMemoryStream ms = new UnmanagedMemoryStream((byte*)p, iSize))
{
ms.Read(buf, 0, buf.Length);
}
}
}
}