首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

Delphi程序模块化设计解决思路

2012-03-15 
Delphi程序模块化设计最近在做一个项目,想把各版块做成模块,用了DLL以后发现千奇百怪的问题不断,烦不胜烦,

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

另外网上现在有关DLL的资料五花八门都有,并没有系统的资料可看,BPL更少,请朋友们帮忙推荐一些有关DLL或BPL的资料吧

[解决办法]
我还是用DLL,包括窗体,共用数据连接,回调函数都可以。没什么问题的。
[解决办法]

探讨
BPL似乎好用些吧,,至少可以共用数据库连接,而DLL似乎不也得引用BPL来实现共用数据库连接吧。

[解决办法]
未装Delphi ,纯手工编写,可能有错。
回调函数定义如下,主程序,DLL都要定义
Type
TDisplayCallback=procedure(const s:PChar);

DLL写法
function test(Conn :Pointer;const ID:Integer;DisplayCallback :TDisplayCallback):integer; stdcall; export;
var
AdoQuery:TAdoQuery;
c :integer;
begin
AdoQuery :=TAdoQuery.Create(nil);
AdoQuery.Connection :=TAdoConnection(Conn);
result :=nil;
Try
AdoQuery.Connection :=AdoQuery;
AdoQuery.SQL.text :='SELECT * FROM EMPLOYEE;';
c :=0;
While AdoQuery.Eof do
begin
if AdoQuery.FieldByName('ID').asinteger=ID then
begin
Result :=PChar(AdoQuery.FieldByName('NAME').asstring);
break;
end;
AdoQuery.Next;
Inc(C);
DisplayCallback(PChar(Format('%d%%',[Trunc((c/AdoQuery.recordcount)*100)])));
end;
finally
AdoQuery.free;
end;
end;

main写法

procedure FDisplayCallback(const s:PChar);
begin
Form1.Staturbar.panels[0].text :=s;
end;

调用
test(Pointer(AdoConnection1),100,@FDisplayCallback);

[解决办法]
探讨
引用:
conn :TAdoConnection
Conn是一个TAdoConnection的一个实例,其实就是个Pointer
如果不喜欢TAdoConnection,那么用Pointer作为Conn的类型都可以,然后强制类型转换。
在主程序中建立的Temp Table在DLL中都可以看到,是不是共用Connection?

我是说比如建立一个P……

热点排行