用dll方式封装mdi子窗体

用DLL方式封装MDI子窗体。 用DLL方式封装MDI子窗体是一种常用的软件开发技术,它的优点: 开发人员可以负责某一个模块的编写包括(界面+逻辑),可以互不干扰,模块开发完成后,主程序统一调用。 易于程序升级,当程序升级时,不用编译主exe文件,更新某个DLL就可以升级。 可以根据客户不同的需求、价钱给他们不同的模块。(奸商都愿意用这招) 最近用到这个技术,因为小弟没有用过,在网上 阅读详情

 

用DLL方式封装MDI子窗体是一种常用的软件研发技术,他的长处:

研发人员能够负责某一个模块的编写包括(界面+逻辑),能够互不干扰,模块研发完成后,主程式统一调用。
易于程式升级,当程式升级时,不用编译主exe文档,更新某个DLL就能够升级。
能够根据客户不同的需求、价钱给他们不同的模块。(奸商都愿意用这招)
最近用到这个技术,因为小弟没有用过,在网上google了一下,对他有了了解,我用的是基于COM的DLL,下面总结如下:

想在DLL中封装MDI子窗体,要注意以下几点:

您的DLL中的接口要有两个参数:第一,主程式的Application对象;第二,主程式窗体对象;
您要重写DLL入口函数
假如是基于COM的,要注意:因为COM没有TApplication和TForm类型,您在传入时需要强转为Integer。
需要注意的就这么多,下面结合例子看看(假设您已建立了工程):

  TComDllTest1 = class(TAutoObject, IComDllTest1)
  Private
    FMsgStr: WideString;
    function GetMDIForm(AForm: TForm): boolean;
  protected
    { Protected declarations }
    function Get_MsgStr: WideString; safecall;
    procedure Set_MsgStr(const Value: WideString); safecall;
    procedure ShowMsgStr; safecall;
    procedure CreateForm(AHandle: SYSUINT); safecall;
    procedure CreateMdiForm(var AApp; AForm: SYSINT); safecall;    //创建MDI窗体 SYSINT为unsigned int
    procedure CreateComTest(AForm: SYSUINT); safecall;
  public
    constructor Create(AForm: SYSINT);
  end;

这是CreateMdiForm方法的实现:

procedure TComDllTest1.CreateMdiForm(var AApp; AForm: SYSINT);
var
  app: TApplication;
  af: TForm;
begin
  app := TApplication(AApp);               //将传进来的Application对象强转
  af := TForm(AForm);                           //将传进来的Form对象强转

  Application := app;                             //将主程式的application付给COM工程的application对象

  if not GetMDIForm(Form1) then        //GetMDIForm 是判断窗体是否已创建
  begin
    Form1 := TForm1.Create(af);        //创建子窗体
  Form1.FormStyle := fsMDIChild;
  Form1.Show;
  end;
end;

最后一步也是最关键的就是重写DLL入口函数,假如不重写,关闭主窗体时会报地址错误,我就吃过这亏(我汗......),在DLL工程文档中写:

procedure DLLUnloadProc(Reason: Integer); register;
begin
 if (Reason = DLL_PROCESS_DETACH) or (Reason = DLL_THREAD_DETACH) then Application := DLLApp;                           //DLLApp是在DLL工程文档中定义的全局TApplication对象
                                          //用来保存Application对象
end;

在DLL初始化的位置加入:

   DLLApp:=Application;                                 //保留Application
   DLLProc := @DLLUnloadProc;                //将重写后的入口函数地址付给DLLProc

这样就实现了DLL封装MDI子窗体,当然您要在子窗体上进行比如:数据库的操作,还要有更丰富的界面,肯定会碰到各种问题。以后总结了再说吧!^_^

Delphi中DLL调用MDI窗口的实现详解 本文还有配套的精品资源,点击获取 简介:DLL(动态链接库)是Windows操作系统中的关键组件,支持代码和数据共享,提高效率。在Delphi编程语言中,DLL特别适用于多文档界面(MDI)应用程序。本文详细介绍了如何在Delphi中创建DLL来与MDI窗口进行交互,包括DLL项目创建、函数编写、导出函数、DLL调用及MDI窗口的管理等技术要点。 1. DLL定义... 阅读详情

相关推荐

Delphi中BPL子窗体封装技术详解

在本章节中,我们将对BPL(Borland Package Library)进行定义,并分析它与DLL(Dynamic Link Library)之间的关键区别。BPL是一种在Delphi开发环境中广泛使用的技术,它允许开发者将一组相关的单元打包成一个单独的可执行模块。这种模块化的方法不仅提高了代码的组织性,还能够在多个项目中实现代码复用。BPL作为一种特殊的库文件,是通过Delphi编译器生成的,它封装了一系列的功能单元,使得这些功能可以在不同的Delphi项目中被共享。

weixin_33816734的博客 1260

让VB可以调用DLL控件中的窗体为MDI子窗体

让VB可以调用DLL控件中的窗体为MDI子窗体

DLL方式封装MDI子窗体是一种常用的软件开发技术

 DLL方式封装MDI子窗体是一种常用的软件开发技术,它的优点:人员可以负责某一个模块的编写包括(界面+逻辑),可以互不干扰,模块开发完成后,主程序统一调用。程序升级,当程序升级时,不用编译主exe文件,更新某个DLL就可以升级。可以根据客户不同的需求、价钱给他们不同的模块。(奸商都愿意用这招) 用到这个技术,因为小弟没有用过,在网上google了一下,对它有了了解,我用的是基于C

编程资料收集与共享交流 852

Delphi接口和面向对象的编程实例..rar

Delphi接口和面向对象的编程实例..rar

添加DLL中的MDI子窗体

这是从ccrun的手里得来的,调用DLL中MDI子窗体的实例

用DLL方式封装MDI子窗体是一种常用的软件开发技术

 用DLL方式封装MDI子窗体是一种常用的软件开发技术,它的优点: 开发人员可以负责某一个模块的编写包括(界面+逻辑),可以互不干扰,模块开发完成后,主程序统一调用。 易于程序升级,当程序升级时,不用编译主exe文件,更新某个DLL就可以升级。 可以根据客户不同的需求、价钱给他们不同的模块。(奸商都愿意用这招)最近用到这个技术,因为小弟没有用过,在

jian704的专栏 606

VB创建标准DLL控件的示例文件(中文版)

使用VB创建标准DLL控件的示例文件,含模块、测试程序,生成程序,导出的DLL文件,个别地方还存在错误,跟本机环境有关,自己动手调试一下。

delphi的DLL封装MDI子窗体

转自http://www.cnblogs.com/kfarvid/archive/2010/06/23/1763753.html 前天遇到一个疑问:主窗体是fsMDIForm时,调用DLL的窗体不可以嵌入在主窗体中。于是就这个问题,我在网上找了相关资料,并找到答案:DLL封装子窗体。 了解后,使用相同方法在DLL的子窗体再调用另一个DLL窗体也可以。如果需要回传参数,可以通过函数获得。 实例

找个地方放一下 3577

DLL中的窗体和主程序互相通信示例.rar

DLL中的窗体和主程序互相通信示例,展示主程序与DLL之间的通信功能,很简单的delphi代码,仅供参考

将DLL中的FORM变为MDI子FORM

找了很久,也很多人问我要类似的东东,纯代码实现.将DLL中的FORM变为MDI子FORM,实现起来非常简单

DLL封装MDI窗体(DLL)

DLL封装MDI窗体(DLL) 一:新建DLL View Code library TestMDIDll;{ Important note about DLL memory management: ShareMem must be thefirst uni...

162

ClearML中文文档实战:从安装到第一个实验的保姆级教程

本文提供ClearML从零开始的实战指南,涵盖核心组件理解、Python SDK安装、服务器配置及首个自动化实验的完整流程。通过改造PyTorch训练脚本的实例,详细演示了如何利用ClearML自动记录实验参数、指标与模型,实现机器学习实验的可复现性与高效管理,并简要介绍了进阶的自动化工作流。

weixin_29216049的博客 398
上一篇: Delphi的TThread类
下一篇: 在RichEdit控件中插入GIF动画表情
iseekcode
博客等级 码龄18年 36粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值