编写MFC的扩展动态库导出类

忙碌命

http://blog.csdn.net/laiboy

http://laiboy.cublog.cn

 

概述

在很多少第三方界面库,如XTremeBCG等,都会提供动态库链接选项,让界面库作为动态加载选择.这些库都比较大,但是我们只是想要一小部分功能,这就需要涉及我们只需将MFC一部分类作为基类,封装成动态库,而不需要封装所有的类。

例如,我实现一个布局元素可自动调整的对话框,为了重用,我将基封装成动态库,有可能我灵感一动,又增加一些新的功能,做成了一个通用的扩展库。

实现

我们可样这样导出一个类:

classs AFX_CLASS_EXPORT CDialogEx : public CDialog

{

......

}

编译没有问题,调用这个基类动态库的时候。

 

GetMessageMap这个类成员不能链接,很简单,因为在MFC的 afxv_dll.h,AFX_CLASS_EXPORT被定义为 __declspec( export ),还有一个 AFX_CLASS_EXPORT,在引用这个自定义的扩展类的时候,认为GetMessageMap是不导出的,因此,需要重新声明 __declspec( .... ).

#ifdef MFC_SELF_CLASS_LIB

    #define MFC_CLASS_EX_API __declspec( dllexport )

#else

    #define MFC_CLASS_EX_API __declspec( dllimport )

#endif // MFC_SELF_CLASS_LIB

上述的基类声明可以改成如下

 

classs AFX_CLASS_EX_API CDialogEx : public CDialog

{

......

}

重新编译即可通过.动态库的工程需要定MFC_SELF_CLASS_LIB

这样使用库的程序不需要定义任何宏.

我在CDialogEx这个库中增加布局控制,任何派生这个CDialogEx的对话框类,就可以实现控件的自动排布,不再像原来的的对话框类那样需要自已调整对话框的控件.使用类的方法和原来的MFC的工程一样,将演示Demo工程中的CDialog都改成CDialogEx的派生,并链接LIB,代码很少改动,就实现了一个自动调整控件布局的对话框.

 

 

当然,有源码演示.代码可能随意修改!但是请保留原作者信息.

总结

这个看来不是什么难事,但是,越是简单的东西越是重要,将MFC的类作为基类,也是实现MFC封装应用的类似插件应用的程序和扩展MFC库的重要手段之一.以前我写的插件框架,也是这样的封装模块技术.希望这篇拙作高手们不要拍砖!!!

 

源码下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值