日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

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

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

前言

  關鍵字:c++ to C#?

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

?

注意

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

?

系列

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

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

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

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

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

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

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

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

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

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

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

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

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

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

?

正文?

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

?

   2.   數據類型

      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   傳出參數

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

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

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


   3.   回調函數一律聲明成成員變量

      例如:

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

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

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

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

?

   4.   調用委托 出錯

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

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

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

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

  

補充?

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

?

   5. 相關文章

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

?

結束

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


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

總結

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

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