首页 > 编程 > C# > 正文

C++联合体转换成C#结构的实现方法

2020-01-24 02:33:35
字体:
来源:转载
供稿:网友

本文实例主要参考MSDN:http://msdn.microsoft.com/zh-cn/library/ya9bz4ha%28v=vs.80%29.aspx

最近因为项目中遇到了C++联合体转换成C#结构的情况,查了很多资料才转换成功。

备注:对于官方这个UNION示例,我的简单理解,就是这类UNION做法,可适当代替IF ELSE 之类操作。

解决问题:如果只接收视频解码数据,而从不接收音频数据,那么是否可以直接定义结构体,并以此来获取视频数据。

/// <summary>/// * @struct tagTFrameInfo_YUV420/// * @brief 解码后帧信息结构(包括音频和视频)/// * @attention 如果只接收视频解码数据,而从不接收音频数据,那么是否可以直接定义结构体,并以此来获取视频数据/// * @原型定义:/// 解码后帧信息结构(包括音频和视频)/// typedef struct tagTFrameInfo/// {///   BYTE   m_byMediaType; // 媒体类型(PCM或YUV420)///   DWORD  m_dwTimeStamp; // 时间戳  ///   union///   {///     BYTE   m_byBitCount; // 为YUV时的颜色bit位数 ///     BYTE   m_bStereo; // 为PCM时的声道值///   };///   union///   {///     WORD   m_wVideoWidth; // 视频帧宽///     WORD m_wBitRate; // 采样bit率(如8000)///   };///   union///   {///     WORD   m_wVideoHeight;// 视频帧宽///     WORD  m_wBand; // 采样的位数(如16)///   };/// }TFrameInfo,*PFrameInfo; /// </summary>[StructLayout(LayoutKind.Sequential)]public struct tagTFrameInfo_YUV420{  /// <summary>  /// 媒体类型(0:yuv420; 1:pcm; 2:rgb32: 3:uyvy; 4:YV12),pcm是音频  /// @原型:BYTE   m_byMediaType; // 媒体类型(1:PCM或0:YUV420)  /// </summary>  public byte m_byMediaType;     /** 媒体类型(0:yuv420; 1:pcm; 2:rgb32: 3:uyvy; 4:YV12),pcm是音频 */  /// <summary>  /// 时间戳  /// @原型:DWORD  m_dwTimeStamp; // 时间戳  /// </summary>  public UInt32 m_dwTimeStamp;     /** 时间戳 */  // YUV  /// <summary>  /// 为YUV时的颜色bit位数  /// @原型:BYTE   m_byBitCount; //为YUV时的颜色bit位数  /// </summary>  public byte m_byBitCount;     /** 为YUV时的颜色bit位数 */  /// <summary>  /// 视频帧宽  /// @原型:WORD   m_wVideoWidth; //视频帧宽  /// </summary>  public UInt16 m_wVideoWidth;     /** 视频帧宽 */  /// <summary>  /// 视频帧宽  /// @原型:WORD   m_wVideoHeight; //视频帧宽  /// </summary>  public UInt16 m_wVideoHeight;     /** 视频帧宽 */}

感兴趣的读者可以对此调试运行一下,希望对大家有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表