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-05C#使用SendMessage實(shí)現(xiàn)進(jìn)程間通信的方法
這篇文章主要介紹了C#使用SendMessage實(shí)現(xiàn)進(jìn)程間通信的方法,涉及C#中SendMessage方法的使用技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04C# datagrid非常規(guī)方法實(shí)現(xiàn)添加合并列
這篇文章主要介紹了C# datagrid非常規(guī)方法實(shí)現(xiàn)添加合并列,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-11-11C#使用OpenCvSharp實(shí)現(xiàn)透視變換功能
這篇文章主要為大家詳細(xì)介紹了C#如何使用OpenCvSharp實(shí)現(xiàn)透視變換的功能,文中的示例代碼簡(jiǎn)潔易懂,具有一定的學(xué)習(xí)價(jià)值,需要的小伙伴可以參考下2023-11-11C#使用foreach循環(huán)遍歷數(shù)組完整實(shí)例
這篇文章主要介紹了C#使用foreach循環(huán)遍歷數(shù)組,結(jié)合完整實(shí)例形式較為詳細(xì)的分析了C#遍歷數(shù)組的相關(guān)技巧,需要的朋友可以參考下2016-06-06C#服務(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