如何封装dll文件,dll怎么封装
作者:朱
资料来源:http://blog..net/clever101
网上有很多关于VC编程中DLL封装对话框的资料。现在想探讨一下如何用DLL封装框架窗口、文档、视图,得出一些成果与大家分享。我发现了两种DLL封装框架视图的方法。其实用DLL封装框架视图涉及到两点:一是如何封装;第二是保证窗口被破坏后没有内存泄漏。(以下所有代码的开发环境为:VS C 2005 sp1,Win XP sp2)
方法1:动态创建窗口。
请不要误会,我不是指用C语言开发SDK动态创建窗口的方式。当然这是完全可以的,但问题是这种方式太复杂了。微软把MFC打包了,我们不用感谢微软。我使用API和MFC的组合。我们把调用DLL模块的程序称为宿主程序,把封装表单的DLL称为客户端程序。
首先,我们使用共享MFC构建一个常规的DLL项目Custom1。我的基本想法是这样的:定义三个类:
一般设计如下:在CCustomManage1类中定义一个CCustomFrameWnd1类的指针,在CCustomFrameWnd1类中定义一个CCustomView1类的指针。
主要创建代码如下:
为了防止内存泄漏,我们需要考虑如何防止窗口被破坏。为了更好地说明这个问题,我将首先构建一个调用DLL来说明这个问题的单文档project Ower。现在Ower项目的框架类CMainFrame类定义了CCustomManage1类的私有变量:
然后新建一个菜单项,菜单项的命令响应功能会弹出一个新窗口。具体代码如下:
这时我们需要考虑用户如何关闭新窗口,即用户点击调用程序的关闭按钮关闭两个窗口;或者单击DLL中弹出的新窗口的关闭按钮。那么我们在实现CCustomManage1类的DestroyFrameWnd函数时就需要考虑这一点,避免用户在关闭新窗口时先出错,再关闭调用程序,也就是保证关闭时窗口句柄有效。
当然,你也可以测试工具栏是否可以加载到DLL的新窗口中,响应Windows的标准消息。我测试过了,没问题。