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

2016-02-19 12:38 13 1 收藏

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

【 tulaoshi.com - 编程语言 】

  在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;

  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;

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

  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

  {$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;

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

  exports
      _ShowTestMng;
  end.

来源:http://www.tulaoshi.com/n/20160219/1601365.html

延伸阅读
标签: PHP
最近在做一个全站的系统,自己是大2的学生,没有什么经验,希望大家能指教指教,不慎感激。 情况大概介绍一下: 网站主要定位是资源类网站,主要做电影、连续剧、软件等等的下载。 譬如拿软件来举例子,请教一下分类表的。我现在只查到这样的: ------------------------------------------------------------------ Category...
一、开使你的第一个DLL专案 1.File-Close all-File-New﹝DLL﹞ 代码 : //自动产生Code如下 library Project2; //这有段废话。 uses   SysUtils,   Classes; {$R *.RES} begin end. 2.加个Func进来: 代码 : library Project2; uses &nb...
标签: Web开发
本来想用网上找来的分页程序,不过都得做修改,感觉麻烦了,还是自己写一个好了,以后自己用的时候修改就方便了~~大家都多动手,自己写的才是最好的,日后想干什么的,做修改也是很容易的~~顺便也扩充一下自己的代码库~~ 补充一句,cpage是页面计数,应为全局变量,这样可以随处调用它,totalpage是总页数 JS静态分页程序 a:link,a:visited...
发一个《堡垒》视频,让大家看看这游戏 魔兽世界--猩猩的胜利:大灾变猎人轻松单刷暮光堡垒小怪 首先在文章前的第一句话就是要感谢教我的原创者:冰霜之刺 <蜗牛一个多月前教了我这个怪的单刷方法~ 经过我自己的傻瓜式改良之后,已经可以无脑到3分钟内不停不低于两只的速度了。 接下来我们进入正文吧。今天要教大家的是无...
标签: Web开发
jquery使select选中: 用$("#select").attr('value','2');时firefox可以,但ie6不可以 改用$("#select").val('2'),两者都可以了,而且更简洁 自己的理解:value不是select的正规属性,这个value存在于option里,所以第一句在兼容上有点问题

经验教程

337

收藏

12
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部