电脑爱好者,提供IT资讯信息及各类编程知识文章介绍,欢迎大家来本站学习电脑知识。 最近更新 | 联系我们 RSS订阅本站最新文章
电脑爱好者
站内搜索: 
当前位置:首页>> delphi技术>>用Delphi制作DLL小结(2):

用Delphi制作DLL小结(2)

来源:远方网络 | 2005-12-31 9:47:02 | (有1697人读过)

八 在DLL中建立一个TMDIChildForM

1 Dll中的MDIForm.FormStyle不用为fmMDIChild.

2 在CreateForm后写以下两句:

function ShowForm(mainForm:TForm):integer;stdcall

var

Form1: TForm1;

ptr:PLongInt;

begin

ptr:=@(Application.MainForm);//先把dll的MainForm句柄保存起来,也无须释放,只不过是替换一下

ptr^:=LongInt(mainForm);//用主调程序的mainForm替换DLL的MainForm。MainForm是特殊的WINDOW,它专门管理Application中的Forms资源.

//为什么不直接Application.MainForm := mainForm,因为Application.MainForm是只读属性

Form1:=TForm1.Create(mainForm);//用参数建立

end;

备注:参数是主调程序的Application.MainForm

九 示例:

DLL源代码:

library Project2;

uses

SysUtils,

Classes,

Dialogs,

Forms,

Unit2 in 'Unit2.pas' {Form2};

{$R *.RES}

var

ccc: Pchar;

procedure OpenForm(mainForm:TForm);stdcall;

var

Form1: TForm1;

ptr:PLongInt;

begin

ptr:=@(Application.MainForm);

ptr^:=LongInt(mainForm);

Form1:=TForm1.Create(mainForm);

end;

procedure InputCCC(Text: Pchar);stdcall;

begin

ccc := Text;

end;

procedure ShowCCC;stdcall;

begin

ShowMessage(String(ccc));

end;

exports

OpenForm;

InputCCC,

ShowCCC;

begin

end.

调用方源代码:

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls;

type

TForm1 = class(TForm)

Button1: TButton;

Button2: TButton;

Edit1: TEdit;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.DFM}

procedure OpenForm(mainForm:TForm);stdcall;External'project2.dll';

procedure ShowCCC;stdcall;External'project2.dll';

procedure InputCCC(Text: Pchar);stdcall;External'project2.dll';

procedure TForm1.Button1Click(Sender: TObject);

var

Text: Pchar;

begin

Text := Pchar(Edit1.Text);

// OpenForm(Application.MainForm);//为了调MDICHILD

InputCCC(Text);//为了实验DLL中的全局变量是否在各个应用程序间共享

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

ShowCCC;//这里表明WINDOWS 32位应用程序DLL中的全局变量也是在应用程序地址空间中,16位应用程序或许不同,没有做实验。

end;


delphi技术热门文章排行
网站赞助商
购买此位置

 

关于我们 | 网站地图 | 文档一览 | 友情链接| 联系我们

Copyright © 2003-2024 电脑爱好者 版权所有 备案号:鲁ICP备09059398号