delphi调用带有窗体的dll,窗体的事件怎样调用?

如图,这是DLL的窗体,当我在程序中成功调用这个DLL的窗体.但当点击时候就出错了.请问是不是窗体里所有的事件都要重新调用?我动态和静态打开窗体都尝试过了.出错提示一样.... 如图,这是DLL的窗体,当我在程序中成功调用这个DLL的窗体.但当点击时候就出错了.请问是不是窗体里所有的事件都要重新调用?我动态和静态打开窗体都尝试过了.出错提示一样.
应该在程序中怎样使DLL的窗体事件运行?
展开
 我来答
windblast
推荐于2017-12-15 · 知道合伙人软件行家
windblast
知道合伙人软件行家
采纳数:5633 获赞数:13623
毕业于空军第一航空学院电子专业,1991年开始接触电脑,从事多年计算机编程,具有较丰富的经验。

向TA提问 私信TA
展开全部

以下是我编写的示例代码,完成这个示例,需要三个文件:

1. dll工程文件, test.dll:

library testDll;

uses

  SysUtils,

  Classes,

  Forms,

  FormDll in 'FormDll.pas' {frmDll};

{$R *.RES}

function GetDllForm: TForm; stdcall; export;

begin

  Result := frmDll;

end;

exports

  GetDllForm;

begin

end.

2. dll中包含的窗体,窗体有一个按钮,FormDll.pas:

unit FormDll;

interface

uses

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

  Dialogs, StdCtrls;

type

  TfrmDll = class(TForm)

    Button1: TButton;

    procedure Button1Click(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

var

  frmDll: TfrmDll;

implementation

{$R *.dfm}

procedure TfrmDll.Button1Click(Sender: TObject);

begin

  MessageDlg('你已经成功使用了DLL窗体。',  mtInformation, [mbOK], 0);

end;

initialization

begin

  frmDll := TfrmDll.Create(Application);

end;

finalization

begin

  frmDll.Free;

end;

end.

3. 调用dll窗体的文件,testdll.pas:

unit testdll;

interface

uses

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

  Dialogs, StdCtrls;

type

  TForm2 = class(TForm)

    Button1: TButton;

    procedure Button1Click(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

var

  Form2: TForm2;

function GetDllForm: TForm;

implementation

{$R *.dfm}

function GetDllForm: TForm; external 'testdll.dll';

procedure TForm2.Button1Click(Sender: TObject);

var

  AForm: TForm;

begin

  AForm := GetDLLForm;

  AForm.Show;

end;

end.

4. 显示结果:

zyjying520
2012-04-02 · TA获得超过225个赞
知道小有建树答主
回答量:436
采纳率:100%
帮助的人:372万
展开全部
这得看你怎么声明dll中导出的那个函数的
给你个例程
dll中声明导出的函数
procedure ShowDllForm;stdcall;
begin
if Form1 = nil then
begin
Form1 := TForm1.Create(Application);
Form1.Show;
end else if not Form1.Showing then
Form1.Show;
end;
追问
晕,这图不就是一个buttonclick的事件吗?我就是在应用程序里按下的时候出错了..怎样调用这个按钮的点击事件(我感觉应该不用调用该事件,但不知道是不是).
根据你上面说的DLL只能有过程和函数?窗体按钮的事件都不能调用吗?
追答
我汗,使用dll中的窗口,只需要导出窗口就行了,里面的事件是由它自身维护的,
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式