这个问题我来帮你吧 一个exe文件,一个dll文件 在dll 的窗体里不要放database,而是在public里声明一个database; 在exe文件里放好database,设置好 以下是源代码 dll文件 导出函数为showform; unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Grids, DBGrids, DB, DBTables; type TForm1 = class(TForm) Table1: TTable; DataSource1: TDataSource; DBGrid1: TDBGrid; private { Private declarations } public database1:tdatabase; { Public declarations } end; procedure showform(applicationname:tapplication;databasename:tdatabase);stdcall; var Form1: TForm1; dllapplication:tapplication; implementation {$R *.dfm} procedure showform(applicationname:tapplication;databasename:tdatabase);stdcall; begin application:=applicationname; application.CreateForm(tform1,form1); form1.Database1:=databasename; form1.Table1.DatabaseName:=form1.database1.DatabaseName; form1.table1.Open; form1.ShowModal; form1.Free; end; initialization dllapplication:=application; finalization dllapplication:=application; end. exe文件 unit Unit2; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, DB, DBTables; type TForm2 = class(TForm) Database1: TDatabase; Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; procedure showform(applicationname:tapplication;database:tdatabase);stdcall;external 'dllfile.dll ' name 'showform '; var Form2: TForm2; dllapplication:tapplication; implementation {$R *.dfm} procedure TForm2.Button1Click(Sender: TObject); begin showform(application,database1); end; |
|