对于用动态连接库导出的一些感悟
来源:互联网 发布:编程语音排行榜 编辑:程序博客网 时间:2024/05/16 19:31
作为一个动态连接库,必然会有导出的东西.虽然动态连接库本身可以导出函数,类,变量,但是导出类和变量一般都不建议使用,一方面导出类和变量的时候回把库内的一些封装结构暴露给用户,另一方面,使用导出类的用户必须也使用C++语言.因此我们通常都只导出函数.
但是如果运用面向对象的方法,一般都需要dll的用户可以去使用dll中创建的对象,为了不直接导出c++类,我们就得提供导出对象的接口.用C++实现的话,接口一般就是包括一些纯虚函数的结构体.我们使用一个工厂类返回这个对象关于这个接口的指针.
然而,加入接口也会带来新的问提,其中最严重的问题就是,接口的引入必然的引入了多继承的关系,而且这种多继承关系中经常会出现多个相同接口被继承的关系. 下面给出一个例子:
CParent IParent
| |
----------------- ----------------
| | | |
CChild1 CChild2 IChild1 IChild2
图(1) 图(2)
图(1)为内部实现的继承关系,图(2)为接口的继承关系,合并这两种关系后得到的是下图的一种网状关系:
IParent
|
--------------------------------------
| | |
CParent IChild1 IChild2
| | |
------------------- |
| | |
| CChild1 |
| |
--------------------------------------
|
CChild2
这时向上转化二义性的问题尤为严重.
为了解决这种问题,我所使用的方法是:
1.使接口间的继承关系必须是单继承(这点非常重要,因为你不可能要求用户去用你的库的时候还得去从你的设计角度考虑,先把对象转成什么,再把对象转成什么)
2.需要在实现类中加入接口虚函数的重写.这些重写必须要把父实现类的实现都搬过来,然后自己也可以添加.
3.在除了该类本身的辅助函数外的函数中,都使用接口,而不是类指针.(这点是最重要的,因为这样可以避免相同对象用指针比较时由于指针不是同一个对象的指针而产生比较时发现不同)
- 对于用动态连接库导出的一些感悟
- 对于web安全测试的一些感悟
- 对于团队的一些感悟感想
- 对于Windows传感器开发的一些感悟
- 对于ppt设计的一些感悟
- 新手对于美赛的一些感悟
- 对于看书的一些感悟(编程思想)
- 一些对于机器学习的感悟和思考
- 对于php、mysql优化、angularjs的一些小感悟
- 一个二年级菜鸟对于面向对象的一些感悟
- 对于爱情的感悟!
- 对于动态规划的一些整理
- Windows基础-动态连接库的导出与发布
- 对于人生目标的一点感悟
- DLL是动态连接库,使用动态连接库的一些好处
- 目前的一些感悟
- 接口的一些感悟
- 最近的一些感悟
- c++获取系统时间
- 09_9_11_笔试题目
- Google翻译接口应用
- Erlang的最大优势
- 如何在Global.asac中定义静态变量
- 对于用动态连接库导出的一些感悟
- jquery 火狐,IE 请求实例
- Java Web Start技术自述
- HDC,CDC,CWindowDC,CClientDC,CPaintDC基础
- 惊喜!轻松将word转换成pdf文档
- Linux下的多线程编程
- 一个计算机高手的成长历程
- C++ placement new
- Global Warming