C++ Builder 实现可配置界面中遇到的问题_C/C++语言_黑客防线网安服务器维护基地--Powered by WWW.RONGSEN.COM.CN

C++ Builder 实现可配置界面中遇到的问题

作者:黑客防线网安C/C++教程基地 来源:黑客防线网安C/C++教程基地 浏览次数:0

本篇关键词:遇到问题界面配置
黑客防线网安网讯:   需求:提供一个可配置的界面,供DLL们来注册菜单、按钮这些界面元素,界面元素所需的资源由DLL提供。DLL们需要外显的方法,绑定到自己注册的界面元素上。设计:DLL动态加载需要DLL管理...

   需求:提供一个可配置的界面供DLL们来注册菜单、按钮这些界面元素界面元素所需的资源由DLL提供DLL们需要外显的方法,绑定到自己注册的界面元素上

设计:DLL动态加载需要DLL管理器,功能是根据提供的文件名,加载指定的DLL或进行卸载
            DLL是特定类的实现,特定类不但自己要添加界面,有时候还要向外提供服务,需要一个接口管理器,供DLL注册接口和他人取用。
            DLL模仿COM的方式,实现几个Ini, Active, DeActive, UnLoad的接口,这些接口是固定的,因此DLL提供绑定的方法,不可能通过导出函数的形式提供。
           可配置界面提供接口,供添加、删除界面元素,以及改变界面元素的状态。

尝试:DLL将自己的界面元素和相应函数,统一封装到TMenuItem中,相应函数封装到TMenuItem的Action中。

部署:1个exe + n个DLL+dll配置文件+ui配置文件

结果:可以将正确的名字添加到主界面。比如:Menu_DLL1, Menu_DLL2, Menu_DLL3。
            外观上没有任何问题。
            所有的动态菜单都指向了DLL1的响应函数。
            中间过程,添加、UI的界面元素容器、通过UI元素容器中的元素添加过程中,相应函数的地址都没问题。
          
问题出在:VCL的这套东西上,允许exe和dll之间传递TAction*, TMenuItem*。但是并没有对允许的这些操作做很好的支持。以至于出现上述令人莫名其妙的问题。
             或者,将成员函数作为回调函数传递出去的这种方法,也会导致这个问题。

教训:exe和dll之间传递vector尚被人诟病,更何况是T***这些东西呢。返璞归真,传递简单数据类型吧。

下一步:改成简单数据类型,用非成员的函数指针传递出去,作为回调函数试试。

    黑客防线网安服务器维护方案本篇连接:http://www.rongsen.com.cn/show-15200-1.html
网站维护教程更新时间:2012-04-04 22:51:40  【打印此页】  【关闭
我要申请本站N点 | 黑客防线官网 |  
专业服务器维护及网站维护手工安全搭建环境,网站安全加固服务。黑客防线网安服务器维护基地招商进行中!QQ:29769479

footer  footer  footer  footer