前言
原計劃是再寫一篇H264播放器轉換AVI的文章才開始寫總結的,至今未能成功,由於時間問題並且也暫時沒有這個需求,所以決 定從原計劃中去掉這一章節直接進入總結貼,然後結束這個系列文章。如果公司這邊不出什麼意外,可能稍候1-2月會把後續的功能作為本系列 的續集來分享給大家,請諒解!
正文
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.FromArgb(255, 0, 255).ToArgb()
2.3 傳出參數
VC++: int*/ULONG */DWord *
C#: out int/out long/out ushort 等
VC++裡面的int、long數據類型與C#轉換的時候並不 嚴格,只要不超過范圍就行,所以有的地方用int也可以、用long也可以。