//================ dll 工程文件 ======
library d;
uses
SysUtils,
Classes,
ActiveX,
OleDB, ADOInt,
Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
exports showForm,showForm2;
begin
end.
//============ dll 里的窗体代码 ========
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, Grids, DBGrids, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
DBGrid1: TDBGrid;
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
DataSource1: TDataSource;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
procedure showForm(adoC:TAdoConnection;H:Thandle);stdcall;
function showForm2:TFormClass; stdcall;
implementation
{$R *.dfm}
procedure showForm(adoC:TAdoConnection;H:Thandle);
var
form1:Tform1;
p:^TAdoconnection;
begin
application.Handle := h;
form1 := TForm1.Create(nil);
p := @(form1.ADOConnection1);
p^ := adoc;
form1.ADOQuery1.Connection := p^; // 这里只能这样,不能在设计时指定
// showmessage(p^.ConnectionString);
form1.ShowModal;
form1.Close;
end;
function showForm2:TFormClass;
begin
result := TForm1;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
with self.ADOQuery1 do
begin
sql.Clear;
sql.Add('select * from dt_dept ');
open;
end;
end;
end.
// ================== 主程序代码 ==================
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DB, ADODB;
type
TForm2 = class(TForm)
ADOConnection1: TADOConnection;
Button1: TButton;
Button2: TButton;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
form1 :tform;
public
{ Public declarations }
end;
procedure showForm(adoC:TAdoConnection;H:Thandle);stdcall;external 'd.dll';
function showForm2:TFormClass;stdcall;external 'd.dll';
var
Form2: TForm2;
implementation
{$R *.dfm}
procedure TForm2.Button1Click(Sender: TObject);
var
p:pointer;
begin
p := @ADOConnection1;
showForm(ADOConnection1,self.Handle);
end;
procedure TForm2.Button2Click(Sender: TObject);
var
tform1:TFormClass;
begin
tform1 := showForm2;
form1 := tform1.Create(nil) ;
form1.Show;
end;
procedure TForm2.Button3Click(Sender: TObject);
begin
form1.Close;
end;
end.