Delphi程序模块化设计
最近在做一个项目,想把各版块做成模块,用了DLL以后发现千奇百怪的问题不断,烦不胜烦,想改用BPL吧,又没用过,程序的架构这些问题都已规划好,关键就是实施方法还没确定.请教各位大侠,关于DLL和BPL到底用哪种方式比较好
另外网上现在有关DLL的资料五花八门都有,并没有系统的资料可看,BPL更少,请朋友们帮忙推荐一些有关DLL或BPL的资料吧
[解决办法]
我还是用DLL,包括窗体,共用数据连接,回调函数都可以。没什么问题的。
[解决办法]
[解决办法]
未装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);
[解决办法]