DLL插件

来源:互联网 发布:关于人工智能的ppt 编辑:程序博客网 时间:2024/06/07 20:49

最近的一个项目需要将报表文件做成插件形式的!可以让用户远程更新下载,更新模块!

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机制的问题!!:)

原创粉丝点击