将海康视频sdk源码封装成控件

来源:互联网 发布:linux内存泄漏检测 编辑:程序博客网 时间:2024/06/04 18:52

         近日有一个客户想要做一个视频控件,指明要用海康的视频服务器,并提供给我一个SDK演示程序,是一个对话框,上面布满了大大小小的按钮、菜单等控件,我拿过来一看,好,有十多万行源码,好在客户要求的功能不多,只有一个录像功能。

       我就在源码里面删控件,最后总算弄得非常简单明了。后面的问题来了,如何把这个对话框封装成控件呢,根据我的经验,在控件中可以嵌入对话框程序,网上也有例子,但那是在ActiveX控件工程中添加的对话框,要把一个对话框应用程序的例子中的对话框加到ActiveX控件中,还不太好加,何况这个对话框程序中有上百个小的对话框。

       单单把这些对话框资源导到ActiveX控件中,就够折腾一气的,导完了,一编译,出现了非常少见的资源编译错误,无法解决。没办法,只得一个一个把需要的对话框添加到工程中,一步一编译。

    接下来是对App类的改造,把原先在对话框App中的代码,以及包含的头文件都加到控件的App中,在控件类中加入主对话框做为成员变量,编译通过了,运行的时候,出现内存错误,然后断到一个创建主对话框的MFC源码处,接下来反复下断点,甚至注释掉主对话框中几乎所有的成员函数,程序一如即往地出现内存错误,所有的断点都断不下来,即使是把控件类中的主对话框成员变量去掉,还是一样,这几乎是我职业生涯中最迷茫的一刻。

    后来我放弃了,转而把对话框程序原封不动地添加到控件工程中,而把对话框App生成实例的那一句话注释掉,结果就OK了,之后就是一步步测试,出现视频画面,调整各控件大小,封装基本操作,做成控件的方法。

      一切都想不到的顺利,仅仅到最后,将GDI+应用到控件中时,把初始化和注销代码放到控件的App类中,无法注册控件,上网查,看到有牛人说,把这部分代码放到控件类中就行。一试,果然OK。至此,一个符合客户初步需求的控件就这样诞生了。

原创粉丝点击