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

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

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

【 tulaoshi.com - 编程语言 】

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

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

  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;

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

  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;

  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;

  exports
      _ShowTestMng;
  end.

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

延伸阅读
新建工程,点工程->部件,在列表中找到并勾选Microsoft PictureClip Control 6.0将其添加到工具箱。 在窗体中添加一个PictureClip控件,设置它的Picture属性装载一副图像,设置PictureClip控件的Col属性为3(3列),Row属性为3(3行)。 然后添加一个CommandButton控件Command1,设置其Style为1(图形按钮),再复制8个Command1,提示是否创建控件数组...
一、开使你的第一个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...
标签: 怀孕
每位准妈妈都希望自己的宝宝是健康的,所以她们往往买来大量的书籍学习怀孕后的保健和胎教,受精卵的质量在根本上决定了胎儿的健康,掌握好受孕时机,其实比孕后保健和胎教更为重要。 有些女性朋友曾经问冬季怀孕真的不好吗?其实,每个季节都有不同的气候特点,冬天的特点就是寒冷干燥。这种天气引起的一系列变化对受孕也会产生影响。那么,在...

经验教程

716

收藏

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