最近的一个项目需要将报表文件做成插件形式的!可以让用户远程更新下载,更新模块!
DLL中的数据连接是采用SockConnection连接方式的!大体设计如下:
TBaseForm:所有报表窗体的基类,private sc: TSocketConnection;子类能通过public getSc访问此连接!
UCommon:公共单元。由于DLL能导出函数或接口(不在本文章里讨论),所以导出函数的定义在此定义
每个模块只需引入此单元即可!
代码:
unit UCommon;
interface
uses UBaseForm, SConnect, Forms, Dialogs;
type
TBaseclass = class of TBaseForm;
procedure ShowDllForm(AHandle: THandle; sc: TSocketConnection); stdcall;
var myClass: TBaseclass;
implementation
procedure ShowDllForm(AHandle: THandle; sc: TSocketConnection); stdcall;
var
form: TBaseForm;
begin
try
Application.Handle := AHandle;
form := myClass.Create(Application);
form.setSc(sc);
form.ShowModal;
finally
form.Free;
end;
end;
end.
TForm1: 实现类(子类)继承自TBaseForm,并不需要做最大的修改!只需回一句
initialization
myClass := Tlky_frmallxm;//由于要得到类型,所以在此赋值,别的办法没想好,想在UCommon里应用
Application.MainForm得到主窗体类型,但却反回空值,可能是DLL机制的问题!!:)