日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

C# 视频监控系列(14):总结贴——VC++代码转成C#小结

發(fā)布時間:2024/4/13 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C# 视频监控系列(14):总结贴——VC++代码转成C#小结 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前言

  關鍵字:c++ to C#?

?????原計劃是再寫一篇H264播放器轉換AVI的文章才開始寫總結的,至今未能成功,由于時間問題并且也暫時沒有這個需求,所以決定從原計劃中去掉這一章節(jié)直接進入總結貼,然后結束這個系列文章。如果公司這邊不出什么意外,可能稍候1-2月會把后續(xù)的功能作為本系列的續(xù)集來分享給大家,請諒解!

?

注意

?????本系列文章限于學習交流,注重過程,由于涉及公司,所以不提供源代碼下載,非常抱歉!!但是請大家放心,核心、實現(xiàn)以及其他能夠貼出來的代碼我都會貼出來,并且爭取盡所能的回答留言里的每一個問題,感謝大家關注,歡迎交流 :)

?

系列

?????1.?????C# 視頻監(jiān)控系列(1):準備

?????2.?????C# 視頻監(jiān)控系列(2):客戶端——封裝API

?????3.?????C# 視頻監(jiān)控系列(3):客戶端——連接服務器

?????4.?????C# 視頻監(jiān)控系列(4):客戶端——音頻接收和抓圖

?????5.?????C# 視頻監(jiān)控系列(5):客戶端——給服務器端發(fā)送字符串和錄像(數(shù)據(jù)捕獲)

?????6.?????C# 視頻監(jiān)控系列(6):服務器端——封裝API(上) [HikServer.dll]

?????7.?????C# 視頻監(jiān)控系列(7):服務器端——封裝API(下) [DS40xxSDK.dll]

?????8.?????C# 視頻監(jiān)控系列(8):服務器端——預覽和可被客戶端連接

?????9.?????C# 視頻監(jiān)控系列(9):服務器端——數(shù)據(jù)捕獲(抓圖 + 錄像)

?????10.?? ??C# 視頻監(jiān)控系列(10):服務器端——驗證、設置畫面質量、字幕疊加、板卡序列號

?????11.?????C# 視頻監(jiān)控系列(11):H264播放器——封裝API[HikPlayM4.dll]

?????12.?????C# 視頻監(jiān)控系列(12):H264播放器——播放錄像文件

?????13.?????C# 視頻監(jiān)控系列(13):H264播放器——控制播放和截圖?

?????14.?????C# 視頻監(jiān)控系列(14):總結貼——VC++代碼轉成C#小結?

?

正文?

   1.   使用Marshal.AllocHGlobal(使用 GlobalAlloc 從進程的非托管內存中分配內存)創(chuàng)建IntPtr,用完之后記得用Marshal.FreeHGlobal釋放內存,否則如此該方法處在在一個無限循環(huán)中將不斷分配內存,直至內存耗盡。

?

   2.   數(shù)據(jù)類型

      2.1   結構體傳輸一般都會加上ref

         VC++:

            int __stdcall StartVideoPreview(HANDLE hChannelHandle,HWND WndHandle,? RECT *rect,BOOLEAN bOverlay, int VideoFormat, int FrameRate)

         C#:

            public static extern int StartVideoPreview(IntPtr hChannelHandle, IntPtr WndHandle,ref?Rectangle rect, bool bOverlay, int VideoFormat, int FrameRate);

         注:RECT和Rectangle均為結構體

      2.2   指針類型

         VC++:   HWND、HANDLE  

         C#:   IntPtr 一般是取控件窗體的句柄  Panel.Handle

      2.2   顏色

         VC++:   COLORREF

         C#:   int   Color.FromA#ff00ff.ToArgb()

      2.3   傳出參數(shù)

         VC++:   int*/ULONG */DWORD *    

         C#:   out int/out long/out ushort 等

         VC++里面的int、long數(shù)據(jù)類型與C#轉換的時候并不嚴格,只要不超過范圍就行,所以有的地方用int也可以、用long也可以。


   3.   回調函數(shù)一律聲明成成員變量

      例如:

????????//將委托聲明為成員變量!!
????????STREAM_DIRECT_READ_CALLBACK?sdrc;

????????
///?<summary>
????????
///?預覽并客戶端連接
????????
///?</summary>
????????private?void?PreviewAndClientConnect()
????????{

????????????sdrc?=?new?STREAM_DIRECT_READ_CALLBACK(STREAM_DIRECT_READ_CALLBACK1);

????????????
//[必須]注冊編碼圖像數(shù)據(jù)流直接讀取回調函數(shù)
????????????HikVisionSDK.RegisterStreamDirectReadCallback(sdrc,?this.Handle);
????????}

?

   4.   調用委托 出錯

      一般委托出錯有三種情況:

      4.1   參數(shù)類型和api的類型沒有對應上,比如他是char*你給對應的是IntPtr,有可能就會出錯

      4.2   委托沒有聲明成成員變量,前面已經(jīng)強調過很多次也給了文章,這里就不復述了。

      4.3   可能報錯說內存已經(jīng)被收回之類的,你在委托上叫一個這樣的標記:[UnmanagedFunctionPointer(CallingConvention.Cdecl)]。

  

補充?

  2010-2-3  P/invoke in .NET Compact Framework

?

   5. 相關文章

    ?C#調用c++Dll結構體數(shù)組指針的問題

?

結束

   可能還有其他地方需要注意的,這需要你自己細心的對比查看和搜索相關資料,仍然要祝你順順利利!本帖再后續(xù)的工作中會持續(xù)更新,請大家留意!


轉載:http://www.cnblogs.com/over140/archive/2009/04/03/1403924.html

總結

以上是生活随笔為你收集整理的C# 视频监控系列(14):总结贴——VC++代码转成C#小结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。