DLL中使用Form问题

原创 2004年07月04日 22:44:00

   

DLL中使用Form问题

在做大型项目的时候,通过一个主程序(EXE)带n个DLL的模式,是一种通用的做法,这样做的优点有:

1、便于项目的模块化,可以把逻辑上相近的模块封装到一起;

2、便于多人同时开发,由于每一个DLL的功能相对独立,可以同时并行开发;

3、便于发布后的维护和升级,在维护时可以单个单个DLL的修改和发布,不会影响其它模块。

当然还有其它好处,我目前就想到这些,大家补充(^_^偷懒!)

既然有这么多好处,我在开发一个项目时,就决定使用该模式,我的开发工具为C++BUILDER,

结果刚一开始就遇到n多问题(我在网上狂找了一阵,结果发现众说纷纭,莫衷一是,不过也给了我很多的启发)。

我开始的做法是在EXE中设置一个MDIForm,然后想在DLL中放置多个MDIChildForm,大概代码如下:

Host:

FormStyle 设置为fsMDIForm

MyShowForm(Application->Handle,asCaption)

 

DLL:

FormStyle设置为fsMDIChild

 

THandle* DllHandle;

MyShowForm(THandle* Handle,AnsiString asCaption)

{

    DllHandle=Application->Handle; //保存DLL的Handle

    Application->Handle=Handle;    //使用EXE的Handle

    if( asCaption == “Form1” )

    {

       Form1=new TForm1(Application->Handle);

    }

    else

   

}

 

结果发现这种用法问题多多,如当DLL获得焦点时,Tab键和Enter键都不起作用了,在退出时也有问题。

我想这都是因为EXE和DLL不在同一地址空间的缘故,EXE和DLL分别维护各自得内存空间。

加上我想把DLL中的Form放到EXE的Form中的某个控件中去,于是采用了如下的方式:

Host:

FormStyle设为fsNormal(设为fsMDIForm也可)

创建调用  MyShowForm(Control,asCaption);

关闭调用  MyDeleteForm(asCaption);

 

DLL:

FormStyle必须设置为fsNormal

MyShowForm(TWinControl* wcParent,AnsiStirng asCaption)

{

    if( asCaption == “Form1” )

    {

       if( Form1 == NULL )

       {

           Form1=new TForm1(NULL);

           Form1->Parent=wcParent;

       }

       Form1->Show();

    }

    else

   

}

MyDeleteForm(AnsiString asCaption)

{

    if( asCaption == “Form1” )

    {

       delete Form1;

       Form1=NULL;

    }

}

当然,还需要自己处理resize事件,以保证子窗体在主窗体最大最小时保持一致。

 

 

delphi 在DLL中添加窗体

方案一:   在DLL工程中新建一个FORM窗体.在窗体中加入如下代码:   1.首先需要再 implementation 之前声明下以下函数. 1 procedure Sy...
  • farrellcn
  • farrellcn
  • 2016年05月25日 10:44
  • 1620

关于C#应用第三方控件dll的使用方法及常见问题

在引用第三方控件是需要先了解第三方所提供的方法,一个完整的引用还需要提供方给出二次开发方案。这些不用都说,对于不同项目可能用法也是不同具体问题具体分析! 第三方控件一般会与COM方式提供,我们需要导入...
  • TracyMen
  • TracyMen
  • 2016年02月18日 22:57
  • 2981

vs2012中导入msado15.dll的过程中出现的问题若干

#import "C:\\Program Files\\Common Files\\System\\ado\\msado15.dll" no_namespace rename("EOF","EndOf...
  • u011396840
  • u011396840
  • 2014年07月04日 10:06
  • 1605

Dll Form MDI 的TAB问题的解决方法!

  • 2006年02月23日 09:05
  • 516KB
  • 下载

DLL中窗体Form问题思考及解决方法

最近在公司写一个外壳程序,调用DLL插件把FORM嵌入到EXE中的一个PANEL中,其中遇到了不少的问题,大部分已经解决,还有几个至今没有找到解决方法,有待研究,也希望知道解决方法的富翁共享一下研究成...
  • ksrsoft
  • ksrsoft
  • 2013年04月07日 15:26
  • 1133

rac环境中使用create pfile form spfile出现问题

 一、问题解决   1、  查看正常RAC中有关,parameter记录 节点spfile 位置 SQL> show parameter pfile   NAME    ...
  • u013660039
  • u013660039
  • 2015年03月19日 09:55
  • 776

Contact form 7插件使用介绍和常见问题解答

Contact form 7 是一款非常流行的免费表单插件,功能很强大,操作也不复杂,比曾经用过的emailmeform要更好,下面介绍使用方法。 原文:Contact form 7插件使用介绍...
  • hunk2018
  • hunk2018
  • 2017年11月28日 18:35
  • 66

使用$(form).serializeArray()提交表单,获取不到表单值的问题

最近在做Form表单提交时,使用html标签文本框,表单一直获取不到值,服务器控件就能获取到,最后找到的原因是input的标签没有添加name属性,  具体原因需要查询下ID和Name属性的区别,代码...
  • haojuntu
  • haojuntu
  • 2017年04月06日 16:58
  • 1606

yii 使用cactiveform 创建表单时候遇到的一些验证问题和使用ajax_form时重置验证规则的解决办法

yii  cactiveform 在添加验证信息的时候, 有时候稍有不慎,可能导致客户端验证不起作用,尤其是像我这种初学者来说,更是无解了, 好在今天有点时间, 一路追查这个问题,最后从js 端一直追...
  • wjc19911118
  • wjc19911118
  • 2015年01月08日 14:31
  • 3919

C# form窗体skinEngine皮肤及dll下载

  • 2014年08月08日 10:46
  • 1.37MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:DLL中使用Form问题
举报原因:
原因补充:

(最多只允许输入30个字)