一套大程序想用dll实现模块化,大放分!请大家来帮忙指点一下!

arraiy 2005-10-17 10:42:07
一套大程序想用dll实现模块化,大家帮忙给点建议!
程序是一套数据库进销存程序,CS架构(Delphi6+SQL2000)。程序框架是:有公共单元,用来存放自定义的通用的函数和过程;公共的数据源连接及数据模块;其他各个操作窗体都是继承自基类的,现在想用DLL来实现模块化,便于维护和多人员的开发,应该怎么下手?有没有可行的方法?

另外想问几个问题(因为没有正式用过DLL):
1、可否把各个功能窗口单独做成一个DLL?
2、如果可行,那么模块化程序的话,就会把各个功能窗体单独分开,但目前程序的各个功能窗体都是继承自同一个基类的,如果分成不同的DLL,那怎样才能实现继承同一基类窗体?
3、上面两点若能实现,那公共的数据连接及数据模块也能实现吗?
4、如果上述都不能实现,是否要在每个DLL中建立基类及建立数据源及数据模块?
主要就是这几个问题,烦请大家给个建议!多谢!!
...全文
568 20 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
laofang 2005-10-20
  • 打赏
  • 举报
回复
基类当然也可以放在一个DLL中输出
class __declspec(dllexport) CBaseForm
{
public:
CBaseForm(void);
//// TODO: add your methods here.
};
Blakhawk 2005-10-19
  • 打赏
  • 举报
回复
问题都可以实现,
要在每个DLL中建立数据源及数据模块
窗体基类可以直接继承。
lead001 2005-10-19
  • 打赏
  • 举报
回复
关键是虚基类要写好,可将数据库连接等作为参数传入bpl中,bpl各种好处自己体会。
lead001 2005-10-19
  • 打赏
  • 举报
回复
建议采用bpl,一直这样做。具体用法可参照我的blog
http://blog.csdn.net/lead001/archive/2005/07/06/415890.aspx
Dainy 2005-10-19
  • 打赏
  • 举报
回复
我公司一直采用这种方法开发。
1、各个功能窗口可以单独做成一个DLL,
而且建议你一个功能模块做成一个DLL,包含多个窗口;
2、基类做在主程序中,基类引用就可以了;
3、数据连接及数据库模块每个DLL单独建立;
仙侣步惊云 2005-10-18
  • 打赏
  • 举报
回复
用dll来模块化不可避免地会在dll中包含窗体和其它VCL控件,这似乎是一个合理的设计方法,但实现起来会有很大的麻烦:由于dll和主控程序都有自己的application、Screen对象,会导致主控程序和子窗口不同步,进而引起很多很难解决的问题,如焦点转移、数据通讯、主控程序和子窗口的互操作、窗口失去响应、低级内存访问错误等,目前没有较好的解决方案。
建议使用BPL(类似DLL,Borland特殊格式的DLL)代替DLL,则所有问题迎刃而解,因为BPL是面向对象的,整个系统中仅有一个全局的Application和Screen对象,模块间通讯和互操作可轻松实现。
arraiy 2005-10-18
  • 打赏
  • 举报
回复
用DLL做一个基类窗体,然后其他的DLL继承这个基类窗体,这个可以实现?? delphidj(大海) 大哥帮忙给点思路!
wisenowa 2005-10-18
  • 打赏
  • 举报
回复
我说的包指的是borland的特定的动态链接库,据说用着非常方便,我没用过
delphidj 2005-10-18
  • 打赏
  • 举报
回复
第一点,可以实现。第二点利用dll作公共数据模块我试过,结果是不可行。不知有没高手赐教。
arraiy 2005-10-17
  • 打赏
  • 举报
回复
我知道DLL一般的作用是:减小可执行文件的大小;共享代码、数据和资源,可以让其他程序也可以调用;便于维护和升级;隐藏细节的实现。我感觉如果实现程序功能模块化好像不太实际!可是我们老板硬要求这样做!大家帮忙想个法!
linbee 2005-10-17
  • 打赏
  • 举报
回复
各位帮我看看怎么解决
http://community.csdn.net/Expert/topic/4332/4332305.xml?temp=.1810877
advancejar 2005-10-17
  • 打赏
  • 举报
回复
可以的dll可以包含界面的
arraiy 2005-10-17
  • 打赏
  • 举报
回复
TO:wisenowa(最近比较烦)
你说的包是什么意思呀?可不可以详细介绍一下?
laofang 2005-10-17
  • 打赏
  • 举报
回复
实现程序功能模块化,我觉得应由主程序框架+功能模块组成,在主程序框架能根据需要或配置调用各功能模块,以实现二者间的低耦合。
wisenowa 2005-10-17
  • 打赏
  • 举报
回复
1,2用包试试,如果纯粹的dll估计很难,变通一下也许可以

3 数据模块这个东东我是从来不用,不方便;关于 公共的数据连接 当作参数传给dll就ok了
arraiy 2005-10-17
  • 打赏
  • 举报
回复
能实现就好!不过我还希望大家帮我看看那4个小问题,能不能给个详细的建议,谢谢!
rcaicc 2005-10-17
  • 打赏
  • 举报
回复
我认为你提出的几点dll都不容易做到。主要是接口问题。建议使用包。
chenyansong 2005-10-17
  • 打赏
  • 举报
回复
设计最关键,一定要注意啊。。。
其他都可以在网上找到。设计啊。。、。。。。
chenyansong 2005-10-17
  • 打赏
  • 举报
回复
呵呵,你说的问题都可以实现的。Delphi5+数据库都可以的,其他和你要求的一样。举个例子:uses
SysUtils,
Classes,
Base in '..\..\common\source\Base.pas' {FormBase},
B0001 in '..\..\common\source\B0001.pas' {FormB0001},
B0002 in '..\..\common\source\B0002.pas' {FormB0002},
B0009 in '..\..\common\source\B0009.pas' {FormB0009},
B0010 in '..\..\common\source\B0010.pas' {FormB0010},
B0017 in '..\..\common\source\B0017.pas' {FormB0017},
B0016 in '..\..\common\source\B0016.pas' {FormB0016},
Log in '..\..\BPL\source\Log.pas',
F250631 in 'F250631.pas' {Form250631},
F250801 in 'F250801.pas' {Form250801},
F250501 in 'F250501.pas' {Form250501},
F250101 in 'F250101.pas' {Form250101},
F252001 in 'F252001.pas' {Form252001},
F250311 in 'F250311.pas' {Form250311},
F250601 in 'F250601.pas' {Form250601},
B0020 in '..\..\AppleBase\source\B0020.pas' {FormB0020},
B210001 in '..\..\AppleBase\source\B210001.pas' {FormB210001},
FShowFind in '..\..\common\source\FShowFind.pas' {FormShowFind},
PublicJXC in '..\..\AppleBase\source\PublicJXC.pas',
PublicDefine in '..\..\bpl\source\PublicDefine.pas',
F250813 in 'F250813.pas' {Form250813},
F250201 in 'F250201.pas' {Form250201},
F22Base in '..\..\AppleBase\source\F22Base.pas' {Form22Base},
FSelectShop in '..\..\AppleBase\source\FSelectShop.pas' {FormSelectShop},
F250301 in 'F250301.pas' {Form250301},
FCostBatchAdd in '..\..\AppleBase\source\FCostBatchAdd.pas' {FormB1},
B210002 in '..\..\AppleBase\source\B210002.pas' {FormB210002},
DBPublic in '..\..\bpl\source\DBPublic.pas',
F250401 in 'F250401.pas' {Form250401},
F250421 in 'F250421.pas' {Form250421},
F250611 in 'F250611.pas' {Form250611},
F250621 in 'F250621.pas' {Form250621},
F250911 in 'F250911.pas' {Form250911},
F250921 in 'F250921.pas' {Form250921},
F250931 in 'F250931.pas' {Form250931},
F250941 in 'F250941.pas' {Form250941},
F250811 in 'F250811.pas' {Form250811},
F250721 in 'F250721.pas' {Form250721},
F250722 in 'F250722.pas' {Form250722},
F250723 in 'F250723.pas' {Form250723},
U239201 in 'U239201.PAS',
FFindGroup in '..\..\AppleBase\source\FFindGroup.pas' {FormFindGroupID},
FFindSGroup in '..\..\AppleBase\source\FFindSGroup.pas' {FormFindsGroupID},
P22PublicDefine in '..\..\AppleBase\source\P22PublicDefine.pas',
F250901 in 'F250901.pas' {Form250901},
ShowForm in 'ShowForm.pas' {LookForm},
U250901 in 'U250901.pas',
F250701 in 'F250701.pas' {Form250701},
F250703 in 'F250703.pas' {Form250703},
F250702 in 'F250702.pas' {Form250702},
F250704 in 'F250704.pas' {Form250704},
F250711 in 'F250711.pas' {Form250711},
F250712 in 'F250712.pas' {Form250712},
F250331 in 'F250331.pas' {Form250331},
F250321 in 'F250321.pas' {Form250321},
DropHandle in 'DropHandle.pas',
F250713 in 'F250713.pas' {Form250713},
P25public in 'P25public.pas',
F250641 in 'F250641.pas' {Form250641},
F251005 in 'F251005.pas' {Form251005},
F251003 in 'F251003.pas' {Form251003},
F251001 in 'F251001.pas' {Form251001},
F250101_1 in 'F250101_1.pas' {Form250101_1},
F250611_1 in 'F250611_1.pas' {Form250611_1},
F251101 in 'F251101.pas' {Form251101},
FGroupSelectShop in 'FGroupSelectShop.pas' {FormGroupSelectShop},
F250111 in 'F250111.pas' {Form250111},
F251201 in 'F251201.pas' {Form251201},
F251202 in 'F251202.pas' {Form251202},
F251203 in 'F251203.pas' {Form251203},
F251211 in 'F251211.pas' {Form251211},
F251212 in 'F251212.pas' {Form251212},
PCX in 'Pcx.pas',
F250951 in 'F250951.pas' {Form250951},
F250651 in 'F250651.pas' {Form250651},
F250052 in 'F250052.pas' {Form250052},
F250055 in 'F250055.pas' {Form250055},
F250661 in 'F250661.pas' {Form250661},
F250201_1 in 'F250201_1.pas' {Form250201_1},
F250301_1 in 'F250301_1.pas' {Form250301_1},
F252321 in 'F252321.pas' {Form252321},
F250511 in 'F250511.pas' {Form250511},
F250990 in 'F250990.pas' {Form250990},
F250341 in 'F250341.pas' {Form250341};

// F250161 in 'F250161.pas' {Form250161};

{$R *.RES}

begin
end.
这个是一个功能的dll,其他类似。
再设置一个服务器端数据库操作公用程序dbPublic,这套技术难在设计。其他都是很多年前都很成熟了,现在会这个设计的人太少了!!!!
arraiy 2005-10-17
  • 打赏
  • 举报
回复
怎么没有人帮我啊?

2,507

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧