科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道应用软件用Delphi制作DLL小结

用Delphi制作DLL小结

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本文讲解如何实现用Delphi制作DLL

作者:51cto.com整理 来源:51cto.com整理 2007年9月15日

关键字: 软件

  • 评论
  • 分享微博
  • 分享邮件
八 在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;

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章