在使用包的时候的一些问题

Strafer_Y 2010-08-26 12:28:03
我写了一个bpl,在这个包里只有一个TForm2的类,如果我加载包之后用showModal显示form可以在showModal之后用UnLoadPackage卸载。如果我用show显示form那么我应该把包的卸载过程写到哪,在什么时候卸载?
...全文
167 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
iamduo 2010-09-02
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 strafer_y 的回复:]
不好意思,我错了。包能卸载,可还是有一些资源没有释放掉。我在form2的CloseQuery是设置action := caFree是不是能释放掉资源?
[/Quote]

可以。
一样的做法是在释放调用的地方,FreeAndNil(form2);
然后说明一下,如果此包中含有一些全局变量什么的,建议在Initialization初始化,
在finalization释放一下。
Strafer_Y 2010-09-02
  • 打赏
  • 举报
回复
不好意思,我错了。包能卸载,可还是有一些资源没有释放掉。我在form2的CloseQuery是设置action := caFree是不是能释放掉资源?
Strafer_Y 2010-09-02
  • 打赏
  • 举报
回复
我在主窗口中把loadpackage的返回值保存到TMsg的lParam中,把TMsg传到bpl中的form2中,我也重写了form2的destroy方法加了PostMessage()在主窗口中查看了一下重新传回来的TMsg中的lParam属性值和LoadPackage的返回值一样,然后我用UnLoadPackage可就是不卸载包所占的资源。
Strafer_Y 2010-09-02
  • 打赏
  • 举报
回复
大家说的我基本上都明白了,谢谢大家
wxieyang 2010-09-02
  • 打赏
  • 举报
回复
资源释放被释放,取决于你在包中都加载了什么资源,有些资源是属于进程的,不会随着包的释放而释放。
如果你要释放资源,那就需要自己看看在包中你都创建了什么资源,如果包释放了就没有用了,那就在FormClose中或者finalization中释放掉
Strafer_Y 2010-09-01
  • 打赏
  • 举报
回复
机器的配置不是很好,如果bpl太多了的话。加载那么多的bpl内存消耗太多了。我在bpl里只有一个form,所以我想在form用完之后就把bpl给卸载。我也在Form的CloseQuery事件里去写UnLoadPackage不行。
wxieyang 2010-09-01
  • 打赏
  • 举报
回复
加载包的时候,传给包一个接受消息的句柄(比如,主窗体的句柄)
如果你的tform2是包中最后一个被释放的窗体,那么再TForm2中重载Destroy方法

destructor Destroy; override;


destructor TForm2.Destroy;
begin
inherited;
//看好了,是在inherited;之后调用,并且是PostMessage方法
PostMessage(MainHwnd, WM_USER + 1234, 0, 1);
end;

这是向主窗体发送消息,通知主窗体自己已经将资源释放完毕了。

在主窗体中,加入相应WM_USER + 1234的处理过程,在判断lParam 是1的时候,表示包中的窗体已经关闭了
调用一下,调用UnLoadPackage卸载包。

在传递消息的时候,可以附带着相关的信息,比如包的编号等,通过编号,你可以在主窗体中知道该释放哪个包。
iamduo 2010-08-30
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 strafer_y 的回复:]
这个问题没有人能帮帮我吗?好几天了。真不知道如何解决
[/Quote]

请 look #1 #2 的回答

我的疑问是,你为什么一定要 UnLoadPackage?放着好了,程序结束的时候,自己会回收的。
Strafer_Y 2010-08-28
  • 打赏
  • 举报
回复
这个问题没有人能帮帮我吗?好几天了。真不知道如何解决
Strafer_Y 2010-08-27
  • 打赏
  • 举报
回复
var
pModule : HModule;
aClass : TPersistentClass;
begin
result := nil;
pModule := LoadPackage(bplFile);
if pModule <> 0 then begin
try
aClass := GetClass(className);
if Assigned(aClass) then begin
with TComponentClass(aClass).create(application) as TCustomForm do begin
showModal;
//show;
end;
end else begin
showMessage('组件没有找到');
end;
finally
UnloadPackage(pModule);
end;
end else begin
showMessage('不支持此功能模块');
end;
end;
如果是showModal卸载就很容易,如果是show的话UnLoadPackage()这一行应该放到哪。很郁闷啊!!!!
亮剑_ 2010-08-26
  • 打赏
  • 举报
回复
不会再用到此Form时Unload,或在程序退出前统一Unload
modney 2010-08-26
  • 打赏
  • 举报
回复
没试过show,包应该只有showmodal吧
kye_jufei 2010-08-26
  • 打赏
  • 举报
回复
如果說不會再用到FORM,那麼直接UNLOAD,或在程序的CloseQuery事件中去執行UNLOAD...
内容概要:本文围绕“考虑光伏-储能-数据中心多能互补的园区容量优化配置”展开研究,提出了一种基于Matlab代码实现的优化模型,旨在通过整合光伏发电、储能系统与数据中心的高耗能及灵活负荷特性,实现园区内多能系统的高效互补与协同运行。研究建立了综合考虑可再生能源出力波动性、储能充放电特性和数据中心用电规律的数学模型,采用灰狼优化器(GWO)等智能算法求解最优容量配置方案,并可能结合CEEMDAN等信号分解技术进行功率平滑与波动抑制。通过多时间尺度协调与系统级优化设计,提升能源自给率、降低运行成本、增强新能源消纳能力,体现了综合能源系统规划中的先进建模范式。; 适合人群:具备一定电力系统、能源工程、自动化或相关专业背景的科研人员、研究生,以及从事综合能源系统、微电网、绿色数据中心、可再生能源集成等领域技术研发的工程师。; 使用场景及目标:①用于科研复现与学术研究,深入理解多能互补系统容量优化的建模方法、求解流程及关键约束处理;②为工业园区、数字经济园区、绿色数据中心等实际场景的能源系统规划提供技术支撑与决策依据,目标在于实现节能减排、提高能源利用效率与系统经济性;③作为Matlab仿真与智能优化算法应用的学习资源,掌握GWO、CEEMDAN等算法在能源系统优化中的集成与实践。; 阅读建议:建议结合文中提供的Matlab代码进行同步仿真验证,重点关注目标函数构建、约束条件设定、多变量耦合关系及算法收敛性分析,同时可参考文档中提及的混合储能功率分解、风电波动平抑等关联技术模块,深化对多能系统协同优化机制的理解。
内容概要:本文围绕“基于UKF与SRCKF的分布式驱动车辆状态联合估计研究”,系统探讨了利用无迹卡尔曼滤波(UKF)和平方根容积卡尔曼滤波(SRCKF)对分布式驱动车辆的关键运动状态参数(如横摆角速度、质心侧偏角、纵向/横向速度等)进行高精度联合估计的方法。研究通过构建基于Simulink的整车动力学模型与非线性状态估计算法的联合仿真平台,验证了两种滤波算法在复杂行驶工况下的估计精度、收敛性与鲁棒性,尤其针对传统传感器难以直接获取的状态变量提供了有效的解决方案。文中深入分析了非线性滤波理论在车辆状态估计中的适用性与优势,展示了其在提升车辆稳定性控制、先进驾驶辅助系统(ADAS)及自动驾驶系统感知能力方面的关键作用。; 适合人群:具备车辆动力学、现代控制理论及非线性滤波算法基础,熟练掌握MATLAB/Simulink仿真工具,从事智能网联汽车、自动驾驶、车辆状态估计与控制等领域的研究生、科研人员及工程技术开发者。; 使用场景及目标:① 掌握UKF与SRCKF算法的核心原理及其在车辆非线性系统建模中的实现方法;② 构建高精度车辆状态观测器,服务于车辆动力学控制、轨迹跟踪与安全性评估;③ 复现高水平学术论文中的仿真案例,提升科研仿真能力与算法验证水平。; 阅读建议:建议结合车辆动力学理论与卡尔曼滤波基础知识,逐步搭建并调试Simulink仿真模型,重点关注系统噪声与观测噪声的设定、协方差矩阵的初始化、滤波器的收敛行为及参数敏感性分析,后续可拓展至多源传感器融合(如IMU、GPS、轮速)的联合估计框架研究。

5,943

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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