博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 视频监控系列(14):总结贴——VC++代码转成C#小结
阅读量:6439 次
发布时间:2019-06-23

本文共 1965 字,大约阅读时间需要 6 分钟。

前言

  关键字:c++ to C# 

     原计划是再写一篇H264播放器转换AVI的文章才开始写总结的,至今未能成功,由于时间问题并且也暂时没有这个需求,所以决定从原计划中去掉这一章节直接进入总结贴,然后结束这个系列文章。如果公司这边不出什么意外,可能稍候1-2月会把后续的功能作为本系列的续集来分享给大家,请谅解!

 

注意

     本系列文章限于学习交流,注重过程,由于涉及公司,所以不提供源代码下载,非常抱歉!!但是请大家放心,核心、实现以及其他能够贴出来的代码我都会贴出来,并且争取尽所能的回答留言里的每一个问题,感谢大家关注,欢迎交流 :)

 

系列

     1.     

     2.     

     3.     

     4.     

     5.     

     6.     

     7.     

     8.     

     9.     

     10.     

     11.     

     12.     

     13.      

     14.      

 

正文 

   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  

 

   5. 相关文章

     

 

结束

   可能还有其他地方需要注意的,这需要你自己细心的对比查看和搜索相关资料,仍然要祝你顺顺利利!本帖再后续的工作中会持续更新,请大家留意!

转载:http://www.cnblogs.com/over140/archive/2009/04/03/1403924.html

你可能感兴趣的文章
[Leetcode] Path Sum
查看>>
Ext江湖
查看>>
一起谈.NET技术,实战ASP.NET大规模网站架构:Web加速器
查看>>
RHEL 6.6下Python 2.6.6升级到Python 3.6.6
查看>>
linux 内核启动过程以及挂载android 根文件系统的过程 ( 转)
查看>>
shell每日更新(7)
查看>>
单词的个数
查看>>
从程序员到项目经理(27):怎样给领导汇报工作
查看>>
eclipse工程 'cocostudio/CocoStudio.h' file not found
查看>>
045医疗项目-模块四:采购单模块—采购单提交(Dao,Service,Action三层)
查看>>
dockerfile创建php容器(安装memcached、redis、gd、xdebug扩展)
查看>>
转:面对JXTA,我迷茫了
查看>>
IT人必须学会的职场四原则
查看>>
Android之剪贴薄实现
查看>>
WPF数据模板和控件模板
查看>>
Sonix SN9P701 OCR点读笔二维码识别源码
查看>>
oracle 单引号 双引号 连接符
查看>>
[golang] implicit assignment of unexported field
查看>>
数据结构 练习 20-查找 算法
查看>>
hadoop集群虚拟机配置
查看>>