前言

  关键字: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#小结相关推荐

  1. C# 视频监控系列(15):总结贴——可能用到的C# WinForm技术小结

    前言 本章主要把可能用到的C# WinForm 功能性代码在这里汇总一下,以备实现其他功能来满足客户的其他需求,或者方便自己开发. 注意 本系列文章限于学习交流,注重过程,由于涉及公司,所以不提供源代 ...

  2. C# 视频监控系列(2):客户端——封装API

    前言 本章主要是在C#封装的海康DVR客户端SDK 的代码上修改的,并参考<Hikvision 板卡网络开发包编程手册V4.7.pdf>补上更完整的注释,并且参照VC++源码做了小部分修改 ...

  3. C# 视频监控系列(5):客户端——给服务器端发送字符串和录像(数据捕获)

    前言 这几天加紧赶工写服务器端的程序,所有系列文章更新较慢,见谅: ) 注意 本系列文章限于学习交流,注重过程,由于涉及公司,所以不提供源代码下载,非常抱歉!!但是请大家放心,核心.实现以及其他能够贴 ...

  4. C# 视频监控系列(7):服务器端——封装API(下)(1)

    前言 写系列文章的时候[前言]部分变得无言了,可能来得顺利了点吧: ) 本章中提供的封装均是我用笨办法从<<Hikvision 板卡网络开发包编程手册V4.7>>和<&l ...

  5. C# 视频监控系列(11):H264播放器——封装API[HikPlayM4.dll]

    前言 当你认真的写完客户端和服务器端的时候可能不需要再继续往下看关于播放器的代码和说明,因为你已经掌握了如何转换VC++代码的技巧了,加上GOOGLE再来完成这个播放器应该算小菜了.但是作为我的系列, ...

  6. C# 视频监控系列(9):服务器端——数据捕获(抓图 + 录像)

    前言 录像功能是监控系统中最重要的功能之一,除了本文的功能实现外,还需要你自己考虑合适的存储策略:存储大小.时间段.存储盘符等. 注意 本系列文章限于学习交流,注重过程,由于涉及公司,所以不提供源代码 ...

  7. C# 视频监控系列(10):服务器端——验证、设置画面质量、字幕叠加、板卡序列号...

    C# 视频监控系列(10):服务器端--验证.设置画面质量.字幕叠加.板卡序列号 豆豆网   技术应用频道   2009年04月08日  [字号:小 中 大] 收藏本文 被过滤广告 关键字: NetB ...

  8. C# 视频监控系列(13):H264播放器——控制播放和截图

    C# 视频监控系列(13):H264播放器--控制播放和截图 前言 本该把这部分和上一篇合成一篇的,无奈挣扎半天,还是想对称起来,客户端3篇.服务器端3篇--所有播放器也勉强凑3篇吧(封装API的文章 ...

  9. C# 视频监控系列(6):服务器端——封装API(上)(1)

    前言 写系列文章的时候[前言]部分变得无言了,可能来得顺利了点吧: ) 本章中提供的封装均是我用笨办法从<<Hikvision 板卡网络开发包编程手册V4.7>>和<&l ...

最新文章

  1. 微软推出Windows XP/Server 2003紧急安全补丁:修复远程桌面CVE-2019-0708漏洞
  2. 【2020年3月】自然语言处理最新论文速递
  3. 《Linux内核分析》实践4
  4. Springboot 常见请求方式
  5. mysql+server+80_Windows Server 2019 IIS10.0+PHP(FastCGI)+MySQL环境搭建教程
  6. python html解析对比_python htmlparse页面解析示例
  7. Is there anyway to discover which ip addresses are connected to the db?
  8. Android及其他平台音频开源库介绍
  9. mysql 分析函数 平均_mysql平均函数
  10. WSL2 网络异常排查 [ping 不通、网络地址异常、缺少默认路由、被宿主机防火墙拦截]
  11. 阅读《Android 从入门到精通》(10)——单项选择
  12. 通过外挂程序实现SBO中的价格控制策略
  13. android 百度地图api切换城市,【百度地图API】关于如何进行城市切换的三种方式...
  14. 五大特色展区抢占C位,2019深圳国际全触与显示展引燃触控显示产业未来
  15. debian9自动化部署Fully Automatic Installation(FAI)
  16. 使用win10自带录屏软件录制视频
  17. Windows 环境配置Github 的SSH key
  18. IDEA SpringBoot项目Docker一键部署
  19. eos节点服务器_EOS柚子生态投票的骗局,你以为自己在区块恋革命,其实是在参与CX罢了...
  20. Android /assets

热门文章

  1. Node.js 的http.serverRequest 或http.IncomingMessage
  2. 常见数据结构的 Python 实现(建议收藏)
  3. springboot日志的级别
  4. 服务降级-启动时检查
  5. MyBatis 实际使用案例-dataSource
  6. @EnableAutoConfiguration注解的实现原理
  7. 字符流复制Java文件改进版
  8. vscode安装和使用
  9. OAuth2.0授权码认证流程介绍
  10. ExecutorService- Future - Java多线程编程