C# 三个指针数组的C包装器

C# 三个指针数组的C包装器,c#,arrays,pointers,wrapper,C#,Arrays,Pointers,Wrapper,我目前正在开发一个C包装器来使用Dallmeier Common API light。 请参阅以前的帖子: 我已经“包装”了几乎所有的东西,但我一直在包装一个包含三个指针的数组&一个数组整数的回调: dlm_setYUVDataCllback 函数集回调,用于接收当前YUV图像。 参数SessionHandle:当前会话的句柄。 Return PlayerID查看回调。 回调-IPlayerId:id到播放器对象 -yuvData:指向图像Y、U和V部分的三个指针数组 所使用的YUV格式为YUV

我目前正在开发一个C包装器来使用Dallmeier Common API light。 请参阅以前的帖子:

我已经“包装”了几乎所有的东西,但我一直在包装一个包含三个指针的数组&一个数组整数的回调:

dlm_setYUVDataCllback

函数集回调,用于接收当前YUV图像。 参数SessionHandle:当前会话的句柄。 Return PlayerID查看回调。 回调-IPlayerId:id到播放器对象 -yuvData:指向图像Y、U和V部分的三个指针数组 所使用的YUV格式为YUV420平面未打包。 char*y=yuvData[0]; char*u=yuvData[1]; char*v=yuvData[2]; -音高:图像Y、U和V部分音高的整数数组 -宽度:图像的固有宽度。 -高度 -ts:当前帧的时间戳 -extData:帧的附加数据

我如何用c来包装这个

非常感谢您的帮助。

未签名字符**yuvData应定义为[MarshalAsUnmanagedType.ByValArray,SizeConst=3]IntPtr[]yuvData


然后您将得到一个包含3个IntPtr的数组。您可以使用Marshal.read或Marshal.Copy读取实际数据。

谢谢。接下来,我创建了一个具有上述参数的结构,但c中的“Int64_t”应该是什么,我是否对同样是整数数组的“pitch”使用相同的mashala,例如[MarshalAsUnmanagedType.ByValArray,SizeConst=1]IntPtr[]pitchint64_t应该定义为长,在c中也是64位。对于音高,如果“音高”是一维数组,则您的定义是正确的。我如何使用封送。读取或封送。Copy@logicnp:我想你指的是UnmanagedType.LPArray。ByValArray仅对结构字段有效。
int(int SessionHandle, void (*callback) (long IPlayerID, unsigned char** yuvData,  
    int* pitch, int width, int height, int64_t ts, char* extData))