可以用DLL中的Form作为主MDIForm的MDIChild吗?

wangxiangsjz 2003-03-27 09:31:44
我做了一个MDI类型的程序,其中打开若干MDIChild。现在想把MDIChild做成DLL包,这样当我更新升级时只需要升级相应的DLL。我试验了用DLL做Form,当FormStyle是fsNormal时,可以Show出来。但把它改成fsMDIChild,运行到new 建立窗口时,就出现“没有活动的MDIForm”的提示,无法建立MDIChild类型的Form。
请各位高手名示,是不是在DLL中不能建立MDIChild窗口?如果可以,怎么建立?
谢谢!
...全文
94 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangxiangsjz 2003-03-29
  • 打赏
  • 举报
回复
我整理好了。
http://expert.csdn.net/Expert/topic/1594/1594285.xml?temp=.1471063
wangxiangsjz 2003-03-29
  • 打赏
  • 举报
回复
我已经试验成功了,等一等,我整理好再贴上来。
wangxiangsjz 2003-03-29
  • 打赏
  • 举报
回复
谢谢各位,我试验一下。
dragonhux 2003-03-29
  • 打赏
  • 举报
回复
我同意Friecin(雪客)的说法,
我曾经做过的,不过有点不同

完全可以!
代码如下:
首先建立一个DLL项目,然后加入一个Form;
在工程的主源代码unit的.cpp中加入:
#include "Form.h"
TApplication *ThisApp=NULL;

定义导出函数:
extern "C" void __declspec(dllexport)ShowForm(TApplication *CallingApp,TForm *MainForm);

void __std ShowForm(TApplication *CallingApp,TForm *MainForm) //改变
{
//MainForm主窗口的指针;
if(!ThisApp)
{
ThisApp=Application;
Application=CallingApp;
Form->Parent=MainForm;
}
TForm=new Form(Application);
Form->Show();
}


int WINAPI DllEntryPoint(..........)
{
if((reason==DLL_PROCESS_DETACH)&&(ThisApp))
Application=ThisApp;
return 1;
}


//-----------------------------------------
//你的exe中调用方法如下:

void __fastcall TParentForm::NewForm(TObject *Sender)
{
//先定义ShowForm 函数指针
//动态调用那个DLL
.....

ShowForm(Application,this); //改变

}

OK了!

你试试,肯定是可行的!
bobbycn 2003-03-29
  • 打赏
  • 举报
回复
给Friecin(雪客)分吧!
我手头上的程序用的方法和他的一样.
记得要:
Action = caFree;
kataboy 2003-03-28
  • 打赏
  • 举报
回复
哦,学习.
嘻嘻...
pp616 2003-03-28
  • 打赏
  • 举报
回复
呵呵。用setparent就好了。
Behard 2003-03-28
  • 打赏
  • 举报
回复
不过在我看来 Friecin(雪客) 的代码有点问题
怎么没有恢复 Dll Application 的代码呢?
Behard 2003-03-28
  • 打赏
  • 举报
回复
这个问题曾经讨论过很多次
Behard 2003-03-28
  • 打赏
  • 举报
回复
http://expert.csdn.net/Expert/topic/1528/1528981.xml?temp=.5969812
http://expert.csdn.net/Expert/topic/1498/1498963.xml?temp=.3961756
kataboy 2003-03-28
  • 打赏
  • 举报
回复
我试了一下,好像不可以啊!
wangxiangsjz 2003-03-27
  • 打赏
  • 举报
回复
我试验一下。
Friecin 2003-03-27
  • 打赏
  • 举报
回复
完全可以!
代码如下:
首先建立一个DLL项目,然后加入一个Form;
在工程的主源代码unit的.cpp中加入:
#include "Form.h"
TApplication *ThisApp=NULL;

定义导出函数:
extern "C" void __declspec(dllexport)ShowForm(TApplication *CallingApp);

void __std ShowForm(TApplication *CallingApp)
{
if(!ThisApp)
{
ThisApp=Application;
Application=CallingApp;
}
TForm=new Form(Application);
Form->Show();
}


int WINAPI DllEntryPoint(..........)
{
if((reason==DLL_PROCESS_DETACH)&&(ThisApp))
Application=ThisApp;
return 1;
}


//-----------------------------------------
//你的exe中调用方法如下:

void __fastcall TParentForm::NewForm(TObject *Sender)
{
//先定义ShowForm 函数指针
//动态调用那个DLL
.....

ShowForm(Application);

}

OK了!
wangxiangsjz 2003-03-27
  • 打赏
  • 举报
回复
可是我要的效果是主程序不动(fsMDIForm),不同类型的模块用几个DLL实现,画面镶嵌在主程序中。主程序的Form我设置成fsMDIForm,在主程序中调用不同的DLL。可是DLL中的fsMDIChild不能在主程序的fsMDIForm中显示。
kataboy 2003-03-27
  • 打赏
  • 举报
回复
我的意思是说,你做两个窗体.一个是fsMDIForm,一个是fsMDIChild.然后.....
wangxiangsjz 2003-03-27
  • 打赏
  • 举报
回复
“你可以将fsMDIForm这个Hide就行了”是什么意思?
kataboy 2003-03-27
  • 打赏
  • 举报
回复
是不可以的,只有存在fsMDIForm这个窗口时,才有fsMDIChild.你要将DLL中的窗口变成fsMDIChild的话,就必须有fsMDIForm这个,你可以将fsMDIForm这个Hide就行了.
内容概要:本文围绕基于粒子群算法(PSO)的风电与水电(抽水蓄能)联合优化调度问题展开研究,旨在通过智能优化算法实现可再生能源的高效利用与电力系统的经济稳定运行。文系统阐述了粒子群算法的核心原理及其在电力调度的适用性,构建了综合考虑风电出力不确定性、抽水蓄能电站调节能力及系统运行约束的联合优化调度模型。采用Matlab进行算法编程与仿真求解,验证了该方法在降低系统综合运行成本、提升新能源消纳水平、增强电网调峰调频能力等方面的优越性能。研究进一步设计了多种对比场景,分析不同调度策略下的系统表现,充分展示了所提模型在应对复杂运行条件时的鲁棒性与实用价值。; 适合人群:具备一定电力系统分析基础和Matlab编程能力的研究生、科研人员,以及从事新能源并网调度、电力系统规划与运行等相关领域的工程师; 使用场景及目标:①应用于风电场与抽水蓄能电站的协同优化调度决策支持;②为高比例可再生能源接入的电力系统提供经济可靠的低碳调度方案;③服务于高校及科研院所关于智能优化算法在能源系统应用的教学与科研实验; 阅读建议:建议读者结合提供的Matlab代码深入理解算法实现细节与模型构建逻辑,重点关注目标函数设计、约束条件处理及参数设置对优化结果的影响,并通过复现仿真结果来掌握粒子群算法解决复杂非线性调度问题的关键技术要点。

13,872

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧