一个值得大家来考虑的DLL问题

仰望lov

仰望lov

2016-02-19 12:38

下面图老师小编要向大家介绍下一个值得大家来考虑的DLL问题,看起来复杂实则是简单的,掌握好技巧就OK,喜欢就赶紧收藏起来吧!

  在MDI窗体类型的编程中,主窗体(fsMDIForm)怎样调用子窗体(fsMDIChild,此子窗体为DLL)。
  以下是我的原代码:
  ==========================================================================================
  DPR  单元代码

  program Mdiform;

  uses
    Forms,
    UMdiform in 'UMdiform.pas' {Mainform},
    UDM in 'UDM.pas' {GlobalDM: TDataModule},
    UFun in 'UFun.pas';

  {$R *.res}

  begin
    Application.Initialize;
    Application.CreateForm(TMainform, Mainform);
    Application.Run;
  end.
  ===============================================================================================

  主窗体代码:
  unit UMdiform;
  interface
  uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, Udm,StdCtrls;
  type
   
    TMainform = class(TForm)
      Button1: TButton;
      procedure Button1Click(Sender: TObject);
      procedure FormCreate(Sender: TObject);
    private
      { Private declarations }
    public
       MyHandle:HWND;
      { Public declarations }
    end;

  var
    Mainform: TMainform;

  type
    T_ShowTestMng=function (var adm:TMainform) : Boolean; StdCall;

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

  implementation
  {$R *.dfm}

  procedure TMainform.Button1Click(Sender: TObject);
  var
    Lib_         :THandle;
    _ShowTestMng :T_ShowTestMng;
  begin
    Lib_:=LoadLibrary(pchar('MdiChild.dll'));
    try
      @_ShowTestMng:=GetProcAddress(Lib_,'_ShowTestMng');
      if not(@_ShowTestMng=nil) then
        _ShowTestMng(Mainform);
    finally
      FreeLibrary(Lib_);
    end;
  end;

  procedure TMainform.FormCreate(Sender: TObject);
  begin
   MyHandle:=Application.Handle;
  end;

  end.
  ==============================================================================================

  子窗体DLL代码:
  library MdiChild;

  uses
    ShareMem,
    UMdiform,  //此单元为父窗体单元,在顶目设置中我已经设置了搜索此单元在路径。
    Forms,
    SysUtils,
    Classes,
    UChild in 'UChild.pas' {FrmChild};//FrmChild子窗体的FormStyle属性为FsMDIChild

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

  {$R *.res}
  function _ShowTestMng(var adm:TMainform) : Boolean; StdCall;
  begin
    result:=true;
    Application.Handle:=adm.MyHandle;
    Application.CreateForm(TFrmChild,FrmChild);   //程序就出错在此:出错原因是:Cannot create form. No MDI Forms are currently active.
    FrmChild.Show;
  end;

  exports
      _ShowTestMng;
  end.

展开更多 50%)
分享

猜你喜欢

一个值得大家来考虑的DLL问题

编程语言 网络编程
一个值得大家来考虑的DLL问题

每一个设计都能解决一个问题

设计
每一个设计都能解决一个问题

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

教大家一个让数据不再重复的方法

电脑入门
教大家一个让数据不再重复的方法

怎样来培养一个合群的孩子

电脑网络
怎样来培养一个合群的孩子

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

split 函数的一个问题 - PHPchina

PHP
split 函数的一个问题 - PHPchina

检查时最值得我们考虑的八个项目

生活常识 生活小常识
检查时最值得我们考虑的八个项目

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

Win8美化教程

Win8美化教程

新世纪的五四运动:程序白话文(1)

新世纪的五四运动:程序白话文(1)
下拉加载更多内容 ↓