Delphi程序模块化设计

changfenglee 2011-11-16 09:53:36
最近在做一个项目,想把各版块做成模块,用了DLL以后发现千奇百怪的问题不断,烦不胜烦,想改用BPL吧,又没用过,程序的架构这些问题都已规划好,关键就是实施方法还没确定.请教各位大侠,关于DLL和BPL到底用哪种方式比较好

另外网上现在有关DLL的资料五花八门都有,并没有系统的资料可看,BPL更少,请朋友们帮忙推荐一些有关DLL或BPL的资料吧
...全文
1893 42 打赏 收藏 转发到动态 举报
写回复
用AI写文章
42 条回复
切换为时间正序
请发表友善的回复…
发表回复
我看见佛 2011-12-02
  • 打赏
  • 举报
回复
翻出来看看,,,
simontown 2011-11-21
  • 打赏
  • 举报
回复
最近我也在做这种项目,用DLL来划分模块实现插件化平台。我的做法是像数据库操作、主程序信息等,用interface来传递,主程序实现接口,然后把接口对象传递给DLL。不过纯用DLL确实会有不少问题,虽然绝大部分都能够直接或变相解决,但终归不是很方便。BPL鄙人不会,so木有采用。。。还有就是有些朋友说的带包编译,个人感觉也可能不是很方便,因为你发布时可能会发布N多包出去。。。比如我现在这个项目用了DEV套件,带包编译,光DEV的包就有好几十M,而且还跟版本关联太紧。
drroc 2011-11-21
  • 打赏
  • 举报
回复
用Rtti反射调用Bpl,最好的方案,没有之一。

多变的地方,辅以脚本,pax,lua之类,就能很灵活了。
JunyMa 2011-11-19
  • 打赏
  • 举报
回复
使用Dll的方式好呀,其它开发语言也可以调用
wangpeng2011314 2011-11-19
  • 打赏
  • 举报
回复
看来dll和bpl都不怎么好学啊
zlxym 2011-11-19
  • 打赏
  • 举报
回复
[Quote=引用 34 楼 cqs6616 的回复:]

其实delphi模块化开发的话,都离不开bpl,
我还是推荐 exe+bpl+dll的开发模式
[/Quote]
同意,这是最好的方法,只用DLL的话,代码共享有问题,很不方便,只用BPL的话,遇到窗体继承等问题时就不好办了。
cqs6616 2011-11-18
  • 打赏
  • 举报
回复
其实delphi模块化开发的话,都离不开bpl,
我还是推荐 exe+bpl+dll的开发模式
一剑飘雪 2011-11-18
  • 打赏
  • 举报
回复
目前我们也想使用插件式开发
大家可以共同学习啊。相互交流
我的qq344986457 密码答案:范
changfenglee 2011-11-17
  • 打赏
  • 举报
回复
找到一个方案了,用纯DLL的问题太多,现在决定改为exe+dll+bpl

谢谢各位参与
  • 打赏
  • 举报
回复
人方法方法是否发生的风格
  • 打赏
  • 举报
回复
事实上事实上
hanppern 2011-11-17
  • 打赏
  • 举报
回复
我们公司主要是用DLL,带包编译,发布时连包也带进去,基本可以解决用DLL带来的所有问题。
窗体和逻辑都是封装到DLL里,还用了不少三方控件,共用DataModal(adoConn,adoQuery,adoDataSet等),当做参数传到DLL里。三层架构,服务端一个DLL跟和客户端一个DLL对应,加起来超五百个DLL,用了四年,没发现什么由DLL引起的问题。
changfenglee 2011-11-16
  • 打赏
  • 举报
回复
那大家有没有关于这DLL或者BPL方面的书,资料提供看看,DLL窗体的调用问题实在太多了,不系统的学一下是不行了
changfenglee 2011-11-16
  • 打赏
  • 举报
回复
关于DLL的数据连接共享是很简单的,其实说简单一点就是等于建一个新的Unit,然后在里面把数据库连接的过程或函数定义好就行了,只不过DLL和UNIT的调用方式不太一样而已,比如:我在DLL里是这样写的
function AdoQry(Sql_Str:string):TADOQuery;stdcall;
var
Qry:TAdoQuery;
begin
Qry:=TADOQuery.Create(nil);
Qry.Connection:=Con;
Qry.SQL.Clear;
Qry.SQL.Add(Sql_Str);
Qry.Open;
Result:=Qry;
end;

然后主程序如果要引用这一段函数只要赋值给变量就可以了
AdoQry('Select * from 表名');
OO_is_just_P 2011-11-16
  • 打赏
  • 举报
回复
像参数和返回者都是Integer,PChar,boolean的基本类型的,和其他语言编写的可以交互无任何影响。
像TAdoConnection等返回类型也是可以的,其他程序用Pointer可以得到地址,但是其他语言没有TAdoConnection类型与之对应而已,如果无聊也可以编写对应的结构,不过难度较大。
我看见佛 2011-11-16
  • 打赏
  • 举报
回复
好好学习下,Thanks!
OO_is_just_P 2011-11-16
  • 打赏
  • 举报
回复
procedure DisConnect; stdcall; export;
begin
MainConnection.Free;
end;
OO_is_just_P 2011-11-16
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 case5166 的回复:]
引用 10 楼 foxyy8888 的回复:
conn :TAdoConnection
Conn是一个TAdoConnection的一个实例,其实就是个Pointer
如果不喜欢TAdoConnection,那么用Pointer作为Conn的类型都可以,然后强制类型转换。
在主程序中建立的Temp Table在DLL中都可以看到,是不是共用Connection?

我是说比如建立一个P……
[/Quote]

//试试,改改。
var MainConnection :TAdoConnection;
一定要写到implementation上面

function GetConn(。。。;var ConnState:Boolean):Pointer; stdcall; export;
begin
MainConnection :=TAdoConnection.Create(nil);
Result :=nil;
Try
MainConnection.Connectstring(?记不清了) :='....';
MainConnection.Connected :=True;
Result :=Pointer(MainConnection);
ConnState :=True;
Except
ConnState :=False;
end;
end;

procedure DisConnect; stdcall; export;
begin
ConnState.Free;
end;
funxu 2011-11-16
  • 打赏
  • 举报
回复
个人感觉如果你的程序要和其他程序交互,dll好些,因为bpl是delphi才支持的
funxu 2011-11-16
  • 打赏
  • 举报
回复
dll,bpl各有各的优缺点,delphi开发人员指南里有一张讲bpl的,不过仅限入门级
加载更多回复(17)
摘 要 I 第1章 绪 论 1 1.1 面向对象程序设计概述 1 1.1.1 从结构化到面向对象 1 1.1.2 面向对象的程序设计 2 1.2 数据库概述 3 1.3课题来源及系统简介 6 1.3.1 课题来源 6 1.3.2 系统介绍 7 第2章 系统的总体方案设计 8 2.1 软件开发工具的选择 8 2.2 Delphi编程语言 9 2.3系统总体方案 9 2.3.1 PC机程序设计 10 2.3.2串口通信部分 11 2.3.3数据处理和数据库部分 12 2.3.4 数据显示部分 12 第3章 应用软件设计 13 3.1数据库的设计 13 3.2登录模块 15 3.2.1 登陆模块的界面设计 15 3.2.2 登陆模块的程序设计 16 3.3 主窗体模块 17 3.3.1 主窗体模块的界面设计 17 3.3.2 串口通信的设计 18 3.3.3 数据显示的设计 19 3.3.4 主菜单的设计 20 3.3.5 工具栏的设计 21 3.3.6 Excel操作的设计 22 3.4 串口设置模块 22 3.4.1 串口设置模块的界面设计 22 3.4.2 串口设置模块的程序设计 24 3.5 修改密码模块 25 3.5.1 修改密码模块的界面设计 25 3.5.2 修改密码模块的程序设计 26 3.6 设置计划数模块 27 3.6.1设置计划数模块的界面设计 27 3.6.2设置计划数模块的程序设计 27 3.7 权限设置模块 28 3.7.1 权限设置模块的界面设计 28 3.7.2 权限设置模块的程序设计 29 3.8 部门设置模块 30 3.8.1 部门设置模块的界面设计 30 3.8.2 部门设置模块的程序设计 31 3.9 档案设置模块 32 3.9.1 档案设置模块的界面设计 32 3.9.2 档案设置模块的程序设计 33 3.10 系统信息模块 34 第4章 系统调试与性能分析 35 第5章 结 论 37 参考文献 38 附录 39

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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