用delphi开发的程序,想分解若干个bpl和dll,请大家给点建议??

shiyueliuye 2010-02-27 10:39:20
用delphi开发了一个管理系统,现在主程序太大,想分解成若干个bpl或者dll,在以前建立的有独立的数据库连接模块,现在想所有的dll 要用同一个数据库连接模块;以前做的dll都没连接过数据库,
哪位做过类似的 ,给点指导性意见啊?
...全文
360 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
ZyxIp 2010-03-10
  • 打赏
  • 举报
回复
首先楼主要对DLL的使用要很熟悉,否则你会遇到很多的错误,而且也不好调试。
在就是要好好对业务进行分析,放在DLL中的最好是和其它有较简单数据交换接口的东西。


在要就是要找出造成主程序大的原因是什么??
第一个原因是因为是窗体中用的图标和背景图片,不要在每个窗体上都放ImageList 放在一个数据模块窗体中,然后其它窗体引用就可以了,让一个图标在系统中只存在一份
对于放在窗体上的图片,启动时的图片要搞成JPG格式,大小也搞成合适的,最好是放在同目录下,窗体打开时启动。
第二个原因就是窗体较多,看看能不能合并,将无用的窗体删除掉
第三个在就是使用了较多的第三方控件,或者是将第三方控件在窗体上放了一下,然后删除了,但引用的单元没有删除,有的第三方控件是非常大的。检查一下是有非要有必要使用或用其它的方法代替。
第四个原因就是重复的放了很多的ADO控件,其实在你没有使用线程的情况下,是不会有多个ADOQuery同时提交或读取的情况的。将和数据库交互的部分独立出来,界面上不用ADOQ数据库感知控件。


这些都检查过后,还发现编译后程序非常大,然后在考虑使用DLL一类的方式。将某些比较独立的业务模块封装,最好是使用COM+,比如一些模态的弹出窗体最适合放在DLL中,在使用COM+的时候一定要在测试工程中先了解和会使用了,如直接放在较多代码的工程中你会很难调试的。

fengemail8 2010-03-10
  • 打赏
  • 举报
回复
我也准备这样做了,顶起来,,学习
  • 打赏
  • 举报
回复
采用原生ADO连接,传递参数采用POleVariant指向即可。
wanglipo 2010-03-10
  • 打赏
  • 举报
回复
顶起来,好贴啊 回复内容太短了!
13193887977 2010-03-10
  • 打赏
  • 举报
回复
我开发的MIS系统就是分了几个DLL做的,其中DLL要进行初始化一下:

PShareData=^TShareData;
TShareData=packed record
RTLVersion:Real; //RTLVersion
ApplicationHandle:HWND;
MainForm:TForm;
ApplicationIcon:HICON;
MainScreen:^TScreen;
DBXConn:TSQLConnection; //数据库连接
//................还有很多属性,你根据自己的需要声明
end;

var
ShareData:PShareData;

procedure InitDLL(ptr:PShareData);
begin
if ptr^.RTLVersion<>RTLVersion then
raise Exception.Create('RTLVersion not diffent!');
if Application.Handle=0 then begin
ShareData:=ptr;
OldScreen:=Screen;
Application.Handle:=ShareData^.ApplicationHandle;
Screen:=ShareData^.MainScreen^;
end;
end;

然后每个DLL就可以用ShareData^.DBXConn操作数据库了
SQLDebug_Fan 2010-03-03
  • 打赏
  • 举报
回复
DELPHI的程序一般都是做成BPL的方式,做成DLL太麻烦,需要传实例句柄,像Application、Screen对象在每个DLL都不一致。
shiyueliuye 2010-03-03
  • 打赏
  • 举报
回复
引用 5 楼 zhzhrony 的回复:
把主程序代码中的function写到dll中.

需要注意的是dll中的funtion最好不要有主程序中的对象操作,比如form1之类的,就是最好把dll函数写成公共函数,导出函数后面需要加上stdcall,函数参数最好不要使用string ,如果一定要用需要在uses下第一个引用ShareMem 然后导出,编译就可以了.其实dll就和写一般的程序差不多,注意一下就可以


我就是要做出dll ,单是每个dll 都要涉及连接数据库的,这个不知道如何了??
  • 打赏
  • 举报
回复
把主程序代码中的function写到dll中.

需要注意的是dll中的funtion最好不要有主程序中的对象操作,比如form1之类的,就是最好把dll函数写成公共函数,导出函数后面需要加上stdcall,函数参数最好不要使用string ,如果一定要用需要在uses下第一个引用ShareMem 然后导出,编译就可以了.其实dll就和写一般的程序差不多,注意一下就可以
linghengmao 2010-02-27
  • 打赏
  • 举报
回复
我也想,誰有簡單的例子?
haochin 2010-02-27
  • 打赏
  • 举报
回复
项上去。我也想知道啊。。。。

喜欢那种主程序只有几十上百K的。。。但是自不知道怎么实现的,

望高人赐教。
tgbd 2010-02-27
  • 打赏
  • 举报
回复
cmdream 2010-02-27
  • 打赏
  • 举报
回复
用COM+ 回复内容太短了~~~~~~

2,495

社区成员

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

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