/// <summary>
/// 将非托管缓冲区送入托管代码
/// </summary>
/// <typeparam name="T">托管结构体类型</typeparam>
/// <param name="dispPtr">指向缓冲区的指针</param>
/// <param name="ChanNum">通道数(缓冲区中结构体的数量)</param>
/// <returns>托管代码数据</returns>
private T[] StructrueFill<T>(IntPtr dispPtr, int ChanNum) where T : struct
{
T[] structrueBuffer = new T[ChanNum];
int structrueSize = Marshal.SizeOf(structrueBuffer[0]);
int arrySize = structrueSize * ChanNum;
int bufferPoint = 0;
byte[] buffer = new byte[arrySize];
Marshal.Copy(dispPtr, buffer, 0, arrySize);
for(int i = 0; i < ChanNum; i++)
{
byte[] structBuffer = new byte[structrueSize];
Array.Copy(buffer, bufferPoint, structBuffer, 0, structrueSize);
structrueBuffer[i] = StructConvert.BytesToStruct(buffer, structrueBuffer[i]);
bufferPoint += structrueSize;
}
return structrueBuffer;
}
转载于:https://my.oschina.net/sandbela/blog/195528