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

目录
相关文章
|
2天前
|
存储 程序员 C#
100行python代码,轻松完成贪吃蛇小游戏_c#游戏100行代码
100行python代码,轻松完成贪吃蛇小游戏_c#游戏100行代码
|
2天前
|
程序员 C# Python
100行python代码,轻松完成贪吃蛇小游戏_c#游戏100行代码(2)
100行python代码,轻松完成贪吃蛇小游戏_c#游戏100行代码(2)
|
5天前
|
存储 安全 算法
【Linux | C++ 】基于环形队列的多生产者多消费者模型(Linux系统下C++ 代码模拟实现)
【Linux | C++ 】基于环形队列的多生产者多消费者模型(Linux系统下C++ 代码模拟实现)
27 0
|
5天前
|
算法 Linux 数据安全/隐私保护
【Linux | C++ 】生产者消费者模型(Linux系统下C++ 代码模拟实现)
【Linux | C++ 】生产者消费者模型(Linux系统下C++ 代码模拟实现)
13 0
|
5天前
|
C++
【C++】一文深入浅出带你参透库中的几种 [ 智能指针 ]及其背后实现原理(代码&图示)
【C++】一文深入浅出带你参透库中的几种 [ 智能指针 ]及其背后实现原理(代码&图示)
|
5天前
|
C++ 数据格式
【C++】C++中的【文件IO流】使用指南 [手把手代码演示] & [小白秒懂]
【C++】C++中的【文件IO流】使用指南 [手把手代码演示] & [小白秒懂]
【C++】C++中的【文件IO流】使用指南 [手把手代码演示] & [小白秒懂]
|
5天前
|
编译器 C++
【C++】【C++的常变量取地址问题(对比C的不同)】const修饰的常变量&volatile修饰用法详解(代码演示)
【C++】【C++的常变量取地址问题(对比C的不同)】const修饰的常变量&volatile修饰用法详解(代码演示)
|
5天前
|
C++
【期末不挂科-C++考前速过系列P6】大二C++实验作业-模板(4道代码题)【解析,注释】
【期末不挂科-C++考前速过系列P6】大二C++实验作业-模板(4道代码题)【解析,注释】
【期末不挂科-C++考前速过系列P6】大二C++实验作业-模板(4道代码题)【解析,注释】
|
5天前
|
开发框架 前端开发 .NET
C#编程与Web开发
【4月更文挑战第21天】本文探讨了C#在Web开发中的应用,包括使用ASP.NET框架、MVC模式、Web API和Entity Framework。C#作为.NET框架的主要语言,结合这些工具,能创建动态、高效的Web应用。实际案例涉及企业级应用、电子商务和社交媒体平台。尽管面临竞争和挑战,但C#在Web开发领域的前景将持续拓展。
|
5天前
|
SQL 开发框架 安全
C#编程与多线程处理
【4月更文挑战第21天】探索C#多线程处理,提升程序性能与响应性。了解C#中的Thread、Task类及Async/Await关键字,掌握线程同步与安全,实践并发计算、网络服务及UI优化。跟随未来发展趋势,利用C#打造高效应用。

热门文章

最新文章