想用的DELPHI来开发一个系统!但是多人开发时系统应该怎么做,把每一个模块多做成dll吗?在DLL中可以用ADO组件吗?(200分)

  • 主题发起人 主题发起人 goujie
  • 开始时间 开始时间
G

goujie

Unregistered / Unconfirmed
GUEST, unregistred user!
我对DELPHI不是特别熟,现在想用的DELPHI来开发一个系统!但是多人开发时系统应该怎么
做,把每一个模块多做成dll吗?在DLL中可以用ADO组件吗?共享数据模块又如何处理?
请高手指点!!!!!!
谢谢!
 
DLL中好象是无法存放组件的
做成模块可以用DLL,但并不是一定要用它
直接写成单元也可,只是功能结口要划分清楚
作成DELPHI的包也可以嘛
 
意思不太明确
如果是团队开发管理建议适用Visual SourceSafe工具
 
TO HIGOAL:
用包如何实现?在组程序中如何调用?
 
包就是DELPHI的BPL文件
可以在运行时联结也可以在设计时引用
可以构成单独的模块,共乡代码以及更多的东西
 
用cvs吧,teamsource也可以,各人做各人的form,datamodule公用
最后编译成一个exe
没有必要那么复杂,以后程序维护也麻烦。

---
http://www.8421.org
 
这样做没问题。 我们的系统就是这样的结构。 一个主程序负责调用不同功能的dll, 所有子form都在dll中。
dll中完全可以使用ado, 总之我试下来感觉没有哪个控件不能在dll中出现的。 我们的主程序传入一个adoconnection,
dll中所有的adodataset都使用传入的adoconnection来连接数据库, 即使这样程序运行也没有任何问题
(原本是传入登录用户名/密码由dll中的adoconnection单独联数据库, 后来感觉太浪费资源了, 才改成现在这样)。
 
to Pearl
能给一个这样的简单例子吗?(在dll中有from 和 ADO组件的)
现行谢过?
GouJie@btamail.net.cn
 
用Dll放窗体什么的都没问题。你可以看这里。
http://www.delphibbs.com/delphibbs/dispq.asp?lid=534762

也可以分模块。公用函数专门作一个unit存放,共用一个datamodule。
最后把各人的pas和dfm合起来,编译。
 
给你一个我们程序中某个dll的dpr文件, 你就知道怎么写了(设计时没必要用new..直接建立一个dll project, 完全可以先做成exe, 调试通过后再改成dll)。

library Hawb_Status;

uses
Forms,
SysUtils, // 加上一些要用到的unit
Ole2,
ADODB,
{ 下面的都是dll中的form 和 datamodule }
U_Input_HStatus in 'U_Input_HStatus.pas' {F_Input_HStatus},
U_DM_HStatus in 'U_DM_HStatus.pas' {F_DM_HStatus: TDataModule},
U_List_HStatus in 'U_List_HStatus.pas' {F_List_HStatus},
U_SaveLoadF in 'U_SaveLoadF.pas' {F_SaveLoadF},
U_SaveLoadIni in 'U_SaveLoadIni.pas' {F_SaveLoadIni},
U_Search_HStatus in 'U_Search_HStatus.pas' {F_Search_HStatus},
U_ListDef_HStatus in 'U_ListDef_HStatus.pas' {F_ListDef_HStatus},
U_SHawb_Hint in 'U_SHawb_Hint.pas' {F_SHawb_Hint},
hawblistf in 'hawblistf.pas' {ListPreview},
u_hstatus_dest in 'u_hstatus_dest.pas' {F_HStatus_dest};

{$R *.RES}
{ 供主程序调用的函数 }
function MainRunning(AUser: PChar; Privilege: Integer; WorkPath: PChar;
Conn: TADOConnection; TableName, KeyFld: PChar): Boolean; stdcall;

begin
ShortDayNames[1]:='Sun';
ShortDayNames[2]:='Mon';
ShortDayNames[3]:='Tue';
ShortDayNames[4]:='Wed';
ShortDayNames[5]:='Thu';
ShortDayNames[6]:='Fri';
ShortDayNames[7]:='Sat';
LongDayNames[1]:='Sun';
LongDayNames[2]:='Mon';
LongDayNames[3]:='Tue';
LongDayNames[4]:='Wed';
LongDayNames[5]:='Thu';
LongDayNames[6]:='Fri';
LongDayNames[7]:='Sat';
_LoginUsr := StrPas(AUser); // _LoginUsr, _TableName...都是在其他Pas中定义的全局变量
_TableName := TableName;
_UserPrivilege := Privilege;
if WorkPath = nil then
_WorkPath := ''
else
_WorkPath := StrPas(WorkPath);
CoInitialize(nil); // dll中要使用ado组件最好加上这句, 如果不加也没发觉有什么问题
F_DM_HStatus := TF_DM_HStatus.Create(Application); // 先建立datamodule
F_DM_HStatus.MainTable.KeyFldName := StrPas(KeyFld);
F_DM_HStatus.MainTable.Connection := Conn; // 将datamodule中所有的ado控件的connection置为传入的adoconnection
F_DM_HStatus.LookupQry.Connection := Conn;
F_DM_HStatus.ExecCommand.Connection := Conn;
F_DM_HStatus.adodataset1.connection := Conn;
F_Input_HStatus := TF_Input_HStatus.Create(Application); // 建立其他form
F_Search_HStatus := TF_Search_HStatus.Create(Application);
F_List_HStatus := TF_List_HStatus.Create(Application);
F_ListDef_HStatus := TF_ListDef_HStatus.Create(Application);
F_SaveLoadF := TF_SaveLoadF.Create(Application);
F_SaveLoadIni := TF_SaveLoadIni.Create(Application);
F_SHawb_Hint :=TF_SHawb_Hint.Create(Application);
lstpreview := tlstpreview.create(application);
f_hstatus_dest := tf_hstatus_dest.Create(application);
f_input_hstatus.showmodal; // 进入dll程序操作界面
FreeAndNil(F_Input_HStatus); // 调用完成后释放各form
FreeAndNil(F_Search_HStatus);
FreeAndNil(F_List_HStatus);
FreeAndNil(F_ListDef_HStatus);
FreeAndNil(F_SaveLoadF);
FreeAndNil(F_SaveLoadIni);
FreeAndNil(F_SHawb_Hint);
FreeAndNil(F_DM_HStatus);
coUnInitialize;
Result := True;
end;

exports
MainRunning name 'MainRunning';

end.
 
多人接受答案了。
 
把每一个模块可以做成dll,也可在DLL中用ADO组件。至关重要的是在DLL中
这样写
library sgproject;
uses
SysUtils,
Classes,
forms,
comobj,
activex,
sg in 'sg.pas' {Form1};
function sgf(main:tform1):integer;stdcall; ......

在主窗体中调用时
procedure Tmainf.N23Click(Sender: TObject);
begin
sgf(self);
application.Initialize;
end;


 
后退
顶部