首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 視訊監控系列(十四):總結貼——VC++ 轉 C# 實戰心得(一)

     編輯:關於C語言

前言

原計劃寫完 H.264 轉 AVI 才總結,因時間與需求關係決定提前結束系列。若後續有新功能開發,將以續集形式分享 (預計 1-2 個月後)。

正文:核心移植技巧總結

1. 非受控記憶體管理:Marshal.AllocHGlobal / FreeHGlobal

  • 對應 VC++ GlobalAlloc/GlobalFree,從進程非受控堆配置記憶體
  • 鐵律:配置後必須在 finally 區塊或 using 模式中呼叫 Marshal.FreeHGlobal 釋放
  • 若在無限迴圈中重複配置不釋放,記憶體將持續增長直到 OutOfMemoryException
  • 範例模式:
    IntPtr ptr = Marshal.AllocHGlobal(size);
    try {
        // 使用 ptr
    } finally {
        Marshal.FreeHGlobal(ptr);
    }
    

2. 資料型別對照總表

2.1 結構體傳遞:一律加 ref

VC++C#說明
RECT *rectref Rectangle rectRectangle 為對應結構體
DS_BOARD_DETAIL &detailref DS_BOARD_DETAIL detail結構體必須 ref 才能回傳資料

2.2 指標/控制碼型別

VC++C#取得方式
HWND, HANDLEIntPtrControl.Handle, panel.Handle
BYTE*, char*IntPtr 或 byte[]配合 Marshal.Copy 互轉

2.3 色彩值

VC++C#
COLORREF (0xBBGGRR)int Color.FromArgb(255, 0, 255).ToArgb() (0xAARRGGBB)

注意:VC++ COLORREF 為 BGR 順序,C# ToArgb() 為 ARGB,紅藍通道需對調。

2.4 輸出參數

VC++C#
int*, ULONG*, DWORD*out int, out uint, out long

2.5 整數型對應彈性

VC++ int/long (通常 32-bit) 對應 C# int/long 均可,只要不超出範圍。實務上 int 最常用,long 用於 64-bit 數值。

3. 字串處理

  • VC++ char* (ANSI) → C# [MarshalAs(UnmanagedType.LPStr)] string 或 StringBuilder
  • VC++ wchar_t* (Unicode) → C# [MarshalAs(UnmanagedType.LPWStr)] string
  • 固定長度字串緩衝區 → StringBuilder(capacity)

下篇將續述:委托/回調陷阱、陣列封送、錯誤處理模式等進階主題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved