在一个典型的MDI应用程序中,通过主窗体提供的属性和方法MDIChildCount,ActiveMDIChild等可以实现对子窗体的访问。
当我们将子窗体封装在DLL中进行调用时,虽然已经创建了子窗体,但主窗体的MDIChildCount,ActiveMDIChild属性起不了作用了,此时EXE和DLL产生的是两个独立的应用。
那么该如何去控制这些子窗体呢?
主窗體傳遞給DLL中的子窗體的ADO控件連接參數,關閉程序出錯?
当我们将子窗体封装在DLL中进行调用时,虽然已经创建了子窗体,但主窗体的MDIChildCount,ActiveMDIChild属性起不了作用了,此时EXE和DLL产生的是两个独立的应用。
那么该如何去控制这些子窗体呢?
主窗體傳遞給DLL中的子窗體的ADO控件連接參數,關閉程序出錯?
[email protected]
uses shareMem;
看如何?
的地址, 释放Dll之前要到Application与Screen的址恢复要不会报错的.
那么该如何去控制这些子窗体呢?//通过输出函数的方法
主窗體傳遞給DLL中的子窗體的ADO控件連接參數,關閉程序出錯?//ADO控件不能当作参数传递。
library Project2;uses
SysUtils,
Forms,
Classes,
Unit2 in 'Unit2.pas' {FormOne};{$R *.res}
var
OldApp:TApplication;
procedure InitChildForm(tmpApp:TApplication);stdcall;
begin
OldApp:=Application;
Application:=tmpApp;
end;
procedure LoadForm1;stdcall
begin
TFormOne.Create(Application.MainForm);
end;
procedure FinalChildForm;stdcall;
begin
Application:=OldApp;
end;
exports
InitChildForm,
FinalChildForm,
LoadForm1;
begin
end.
//主程序如下应用
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
implementation{$R *.dfm}
procedure InitChildForm(tmpApp:TApplication);stdcall;external 'Project2.dll';
procedure FinalChildForm;stdcall;external 'Project2.dll';
procedure LoadForm1;stdcall;external 'Project2.dll';procedure TForm1.FormCreate(Sender: TObject);
begin
InitChildForm(Application);
end;procedure TForm1.Button1Click(Sender: TObject);
begin
LoadForm1;
end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
FinalChildForm;
end;end.