C++聯(lián)合體轉(zhuǎn)換成C#結(jié)構(gòu)的實(shí)現(xiàn)方法
本文實(shí)例主要參考MSDN:http://msdn.microsoft.com/zh-cn/library/ya9bz4ha%28v=vs.80%29.aspx
最近因?yàn)轫?xiàng)目中遇到了C++聯(lián)合體轉(zhuǎn)換成C#結(jié)構(gòu)的情況,查了很多資料才轉(zhuǎn)換成功。
備注:對(duì)于官方這個(gè)UNION示例,我的簡(jiǎn)單理解,就是這類UNION做法,可適當(dāng)代替IF ELSE 之類操作。
解決問題:如果只接收視頻解碼數(shù)據(jù),而從不接收音頻數(shù)據(jù),那么是否可以直接定義結(jié)構(gòu)體,并以此來(lái)獲取視頻數(shù)據(jù)。
/// <summary>
/// * @struct tagTFrameInfo_YUV420
/// * @brief 解碼后幀信息結(jié)構(gòu)(包括音頻和視頻)
/// * @attention 如果只接收視頻解碼數(shù)據(jù),而從不接收音頻數(shù)據(jù),那么是否可以直接定義結(jié)構(gòu)體,并以此來(lái)獲取視頻數(shù)據(jù)
/// * @原型定義:
/// 解碼后幀信息結(jié)構(gòu)(包括音頻和視頻)
/// typedef struct tagTFrameInfo
/// {
/// BYTE m_byMediaType; // 媒體類型(PCM或YUV420)
/// DWORD m_dwTimeStamp; // 時(shí)間戳
/// union
/// {
/// BYTE m_byBitCount; // 為YUV時(shí)的顏色bit位數(shù)
/// BYTE m_bStereo; // 為PCM時(shí)的聲道值
/// };
/// union
/// {
/// WORD m_wVideoWidth; // 視頻幀寬
/// WORD m_wBitRate; // 采樣bit率(如8000)
/// };
/// union
/// {
/// WORD m_wVideoHeight;// 視頻幀寬
/// WORD m_wBand; // 采樣的位數(shù)(如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>
/// 時(shí)間戳
/// @原型:DWORD m_dwTimeStamp; // 時(shí)間戳
/// </summary>
public UInt32 m_dwTimeStamp; /** 時(shí)間戳 */
// YUV
/// <summary>
/// 為YUV時(shí)的顏色bit位數(shù)
/// @原型:BYTE m_byBitCount; //為YUV時(shí)的顏色bit位數(shù)
/// </summary>
public byte m_byBitCount; /** 為YUV時(shí)的顏色bit位數(shù) */
/// <summary>
/// 視頻幀寬
/// @原型:WORD m_wVideoWidth; //視頻幀寬
/// </summary>
public UInt16 m_wVideoWidth; /** 視頻幀寬 */
/// <summary>
/// 視頻幀寬
/// @原型:WORD m_wVideoHeight; //視頻幀寬
/// </summary>
public UInt16 m_wVideoHeight; /** 視頻幀寬 */
}
感興趣的讀者可以對(duì)此調(diào)試運(yùn)行一下,希望對(duì)大家有所幫助。
- C# 調(diào)用C++寫的dll的實(shí)現(xiàn)方法
- C++調(diào)用C#的DLL實(shí)現(xiàn)方法
- C++與C#互調(diào)dll的實(shí)現(xiàn)步驟
- C#調(diào)用C++版本dll時(shí)的類型轉(zhuǎn)換需要注意的問題小結(jié)
- c++與c#的時(shí)間轉(zhuǎn)換示例分享
- c++函數(shù)轉(zhuǎn)c#函數(shù)示例程序分享
- C#統(tǒng)計(jì)C、C++及C#程序代碼行數(shù)的方法
- C++調(diào)用C#的DLL程序?qū)崿F(xiàn)方法
- C#如何調(diào)用原生C++ COM對(duì)象詳解
相關(guān)文章
C#編程讀取文檔Doc、Docx及Pdf內(nèi)容的方法
這篇文章主要介紹了C#編程讀取文檔Doc、Docx及Pdf內(nèi)容的方法,涉及C#操作COM組件讀取Doc、Docx及Pdf文檔的相關(guān)技巧,需要的朋友可以參考下2015-05-05
C#使用SendMessage實(shí)現(xiàn)進(jìn)程間通信的方法
這篇文章主要介紹了C#使用SendMessage實(shí)現(xiàn)進(jìn)程間通信的方法,涉及C#中SendMessage方法的使用技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04
C# datagrid非常規(guī)方法實(shí)現(xiàn)添加合并列
這篇文章主要介紹了C# datagrid非常規(guī)方法實(shí)現(xiàn)添加合并列,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-11-11
C#使用OpenCvSharp實(shí)現(xiàn)透視變換功能
這篇文章主要為大家詳細(xì)介紹了C#如何使用OpenCvSharp實(shí)現(xiàn)透視變換的功能,文中的示例代碼簡(jiǎn)潔易懂,具有一定的學(xué)習(xí)價(jià)值,需要的小伙伴可以參考下2023-11-11
C#使用foreach循環(huán)遍歷數(shù)組完整實(shí)例
這篇文章主要介紹了C#使用foreach循環(huán)遍歷數(shù)組,結(jié)合完整實(shí)例形式較為詳細(xì)的分析了C#遍歷數(shù)組的相關(guān)技巧,需要的朋友可以參考下2016-06-06
C#服務(wù)器NFS共享文件夾搭建與上傳圖片文件的實(shí)現(xiàn)
本文主要介紹了C#服務(wù)器NFS共享文件夾搭建與上傳圖片文件的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07

