Welcome

首页 / 软件开发 / C# / C#视频监控系列(14):总结贴——VC++代码转成C#小结

C#视频监控系列(14):总结贴——VC++代码转成C#小结2011-07-14 博客园 农民伯伯前言

原计划是再写一篇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也可以。