动态库,静态库,导致的框架设计问题

一般的时候,也不会注意动态库和静态库间的区别。但当出现下面的设计结构时就明显不同了。
1、静态库实现:
    一个工程编译成一个静态库 a.lib
    一个小工程,依赖上面这个静态库,编译成一个动态库 b.dll
    然后一个用户依赖a.lib开发了一个可执行程序,编译成 c.exe
    原本目的是想让b.dll作为使用到a.lib中数据和函数的一个插件,而c.exe运行时就可以从一个统一的入口调用到这个b.dll(也可以是依赖a.lib编写的d.dll, e.dll等)。
    于是问题出现:一个在a.lib中的静态数据同时在b.dll和c.exe中保存一分。当c.exe操作这个静态数据时,他访问自己的,当调用b.dll,而b.dll中调用到这个静态数据时,他就使用b.dll中保存的那份,显然在操作两份了,而用户的初衷应该是操作同一个数据。
2、动态库实现:
    主要是将上面的a.lib也编译成一个动态链接库 a.dll
    其他不变。
    这个时候,一个在a.dll中的静态数据,就只有他享有,其他b.dll和c.exe都只能使用他这个静态数据,而他们自身没有一份这个静态数据。于是问题就不会出现。
 

    最初的目的是想实现一个插件结构,而又不想让基础部分(工程a)编译成一个dll,也就是形成使用时就一个exe和一些dll的插件,而不需要那个工程a了。
    然后大师兄建议,如果要做成实现1那种结构,就必须将a.lib细分,让b.dll依赖的部分生成一个a1.lib, 不依赖的部分生成a2.lib, 于是b.dll依赖a1.lib, c.exe依赖于a2.lib, 于是他们之间就不会冲突。他还建议说,可以有这么中方法:将所有b.dll用到a.lib中的部分建立一个虚基类,于是其实也就是将a.lib和b.dll剥离开来,让他们之间的联系通过一些虚基类关联(通过b.dll中的一些类继承那些虚基类,a.lib中的一些实现也继承这些虚基类),也不知道这种方法能否起到想要的作用。想max或maya等支持的插件好像应该就是这种结构不(自己不知道,师兄好像这么说^_^)。

如果要采用实现1的方法,又不要太大改动a.lib种的结构(否则累死),应该怎么实现呢。

要是你知道,可别忘了分享哦。我qq:252451759

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值