收稿日期:2005-09-08;修返日期:2005-11-02基金项目:国家"863"计划资助项目(2001AA115190-08);北京市教育委员会科技发展计划资助项目(KM200310028109)一种MFC编程框架的.
NET扩展模型*胡子义1,梁博2(1.
许昌学院计算机科学系,河南许昌461000;2.
首都师范大学信息工程学院,北京100037)摘要:介绍了.
NET框架的一些关键技术改进应用在基于MFC的软件系统开发中的方法,构建了一种新的MFC扩展模型,使得使用.
NET技术对基于MFC框架的应用程序进行二次开发成为可能.
关键词:MFC;.
NET框架;定制;应用程序对象;扩展中图法分类号:TP311文献标识码:A文章编号:1001-3695(2006)12-0215-02MFCProgrammingFramework's.
NETExtensionModelHUZi-yi1,LIANGBo2(1.
Dept.
ofComputerScience,XuchangUniversity,XuchangHenan461000,China;2.
CollegeofInformationEngineering,CapitalNormalUniversity,Beijing100037,China)Abstract:The.
NETFrameworkprovidesgreatclasslibraryandarchitecturesupportfordevelopers,buttomanytraditionalMFCprogrammers,itishardtobenefitalotfromthisnewframework.
Thewayofusing.
NETclasslibraryandmanagedcodeinMFCprojectisimport,buthowtousesomekeyfeaturesof.
NETframeworkasMFCprogrammingmodel'scomplementa-tionneedsfurtheremphasis.
AnextendedMFCapplicationisintroduced,whichmakesitpossible.
NETdeveloperscancus-tomizeMFC-basedapplications.
Keywords:MFC;.
NETFramework;Customize;ApplicationObject;Extending自从2000年微软推出.
NET框架以来,基于.
NET框架的应用程序开发经过多年的成熟与发展,已经越来越广泛地被软件开发人员所接受.
但是,许多经验丰富的MFC开发人员也同时面临一个问题,即如何更好地将.
NET框架带来的诸多技术优势和MFC模型进行充分融合,提高开发效率,构建出更高质量的软件系统.
随着软件开发技术的不断发展,将有越来越多的现有MFC应用系统需要使用.
NET技术进行扩展,这些系统也应该为越来越多的.
NET程序员作好准备,为他们使用自己熟悉的.
NET技术来维护原有系统提供可能.
旧有技术的优势和经验需要保留,新技术的关键特征被合理引入,软件系统才能在技术发展中不断进化自己,提供更好的可用性.
1模型设计1.
1背景MFC应用程序框架是在当前Windows应用程序开发中被广泛学习和使用的开发基础,而.
NET框架作为新一代应用程序开发框架也吸引了越来越多的开发人员.
经过多年的开发积累,一个开发团队可能已经积累了大量的基于MFC编程框架的应用系统,如何使这些系统得到有效复用而不被废弃是每一个团队都关心的问题.
许多系统架构师在自己的系统中通过各种方式提供对使用.
NET技术重构、扩展原生系统的构架支持,使自己的应用系统在新技术到来之后仍能焕发勃勃生机.
系统设计者为MFC项目增加全面的.
NET技术支持,使后来的开发者可以使用托管C++代码、类库在代码级对系统进行重新构造,这在技术上并不是什么难题.
如果系统设计者需要在系统更好地提供.
NET重构支持,那么就需要对整个应用系统进行仔细的规划设计,从基础上保障非VC++开发人员也可以为该MFC应用系统提供后续的技术维护支持.
这样的系统模型可能存在于一些大型应用系统之中,但国内外还没有任何开发工具提供商提供融合两种技术的通用应用系统开发模型,导致绝大多数开发人员在学习和程序设计时有了很多不应该有的开发和创造力的局限.
许多开发者认为两者的融合是不可想象的,所以只是盲目地考虑"是否应该从MFC转到.
NET框架下开发"这样的话题.
1.
2模型设计我们要提供的通用扩展模型必须要保留原有的MFC应用程序模型,在此基础之上提供使用.
NET技术和.
NET语言(如C#,VB.
NET等)重构MFC应用程序的机制.
该模型可以称为MFC框架的.
NET重构模型(MFC.
NETRefractoringModel,MDNRModel).
首先,为了使MFC应用程序可以被.
NET扩展,必须使.
NET程序员在任何一个.
NET项目中引用相应的MFC应用程序对象,由其派生,重写其提供的虚函数,重新响应特定的事件.
其次,MFC应用程序在运行时必须能够动态获得.
NET程序集中的对象,获得托管对象,参与系统运行.
MDNR模型为MFC应用程序对象提供一个对应的托管应用程序对象,即一个CWinApp对象对应一个定义为__gcclassManagedClassName对象.
在应用程序中包含托管应用程序对·512·第12期胡子义等:一种MFC编程框架的.
NET扩展模型象,并使用此对象来进行应用程序初始化及用在其他的必要事务流程处理函数中.
一个.
NET工程可以引用托管应用程序对象,在父类的基础上重新派生新的托管类,重写必要的虚函数.
原则上,在MDNR模型中,每一个非托管对象和托管对象均是配对出现的,这样.
NET程序员就可以对任何可用的托管类进行重写,以间接影响原有非托管对象的动作.
这得益于MFC框架下固有的层次编历机制,文档对象(Document)和框架窗口(Frame)也可以自然获得应用程序对象,这样他们也可以获得作为成员变量的托管应用程序对象,使用它所提供的函数(在.
NET框架模型下被称为方法)来影响自身的运行.
在这里需要注意的是,.
NET托管项目是无法直接引用MFC项目的,可以重新将该项目生成为动态链接库以便引用.
推荐的做法是,使用一个MFCDLL项目来从原生MFC应用程序派生新应用程序对象,作为功能增强层,再以此为基础进行.
NET派生.
新的托管派生对象生成之后,原生MFC应用程序对象必须在运行时获得该程序集中的托管对象,并参与到系统的事务流程处理中.
这是一个完整的面向对象设计思想的流程,也是一个面向对象多态性的实施,但由于涉及到异构编程框架的交叉引用与派生,所以加大了这种模型的设计尤其是开发难度.
MDNR模型将这一过程进行了封装,使用字符串的方式来传递托管对象信息,这就要求程序员只需要将包含托管对象的程序集安装到特定的位置,然后对对应的配置字符串进行修改(包括配置程序集的显示名称字符串、托管类型的完全限定名称字符串),MDNR模型会从系统的配置文件中读取并解析该字符串,并生成相应的托管对象.
开发人员只需要解决托管程序集的管理问题,例如使用数据库或者XML配置文件对程序集进行管理.
MDNR模型的最大特点在于,它为传统的MFC应用程序开发模型提供了动态处理的机制,这也正是原生MFC模型的不足.
模型的构建借鉴了MicrosoftOffice系统的模型特征,通过字符串的方式来在运行时加载和生成应用程序对象,使软件系统的重构行为变得简单,从基础上保证了原生系统的可重定制、二次开发能力.
基本系统模型图如图1所示.
2模型技术实现2.
1非托管与托管代码混合编程技术.
NET框架被引入之时同时带来C++的托管扩展.
一般地,开发人员将ISO标准C++[4]称为非托管C++,这些C++代码将被编译为本地代码(x86),传统MFC应用程序就是一例.
而C++的托管扩展允许开发者使用托管语法和托管类型,并生成中间代码.
VC++.
NET支持托管和非托管C++的混合编程,而在一个基于MFC的项目中要使用托管代码,开发者必须打开VisualStudio.
NET的/clr编译开关,并增加必要的.
NET类型库引用.
例如,开发者通过以下代码片段获得.
NET框架的System和System.
Windows.
Forms命名空间下的托管类型,并使用"new"关键字创建托管类型对象[5]:#using#usingusingnamespaceSystem;usingnamespaceSystem::Windows::Forms;#pragmapush_macro("new")#undefnew#pragmapop_macro("new")在混合编码时,开发者常常需要在非托管的类中使用托管参考类型变量,gcroot类型安全包装模板可以将参考类型指针嵌入到非托管类中.
例如,以下代码将一个String类型使用到一个非托管类中:classCNativeClass{gcrootm_string;voidSetString(String*s){m_string=s;}};2.
2为MFC应用程序建立对应的托管对象软件必须持续不断的演化,这是软件的本质特征之一[6].
但技术在不断进步,系统架构师需要将新技术整合到自己的应用系统之中,并考虑使用新技术重新定制和扩展基于原有编程框架的应用系统.
如果希望一个.
NET程序员可以使用自己所掌握的.
NET技术和自己熟悉的.
NET语言(如C#,VB.
NET)来重新定制基于MFC的应用程序,那么他就必须能够引用原生应用程序对象,通过继承并重写该对象提供的方法,重新响应原生程序所激发的事件.
同时,这种修改必须在应用程序的外部进行,作为可复用的系统重构单元,被原有系统在运行时动态加载.
所以,为MFC应用程序对象提供一个对应的.
NET托管对象就是必要的.
根据设计,MFC原生应用程序在运行时使用这个托管对象,完成必要的初始化工作.
首先,需要在MFC项目中增加一个托管类,代码如下:#pragmaonceusingnamespaceSystem;namespaceYourApp{__gcpublicclassAppObject:publicObject{public:AppObject(void);~AppObject(void);virtualvoidInitInstance();(下转第219页)·612·计算机应用研究2006年CMFCApp+-+m_pMAppObject:gcroot~CMFCApp+CMFCApp+InitInstance:BOOL+SomeMFCAppFunction.
voidDefaultManagedAppObject+-FieldsMethodsProperties+InitInstance:void+SomeVirtualFunction:void-AnotherManagedAppObject+Fields++CMFCDocObject:gcroot+-+m_pMAppObject:gcroot~CMFCDoc+CMFCDoc+InitInstance:BOOLPropertiesDefaultManagedAppObject+OnNewDocumentvoid-AnotherManagedAppObject+++COtherMFCClass+-~CotherMFcclass+CotherMFcclass+OnSomeEventint+SomeFunction:void-其他应用程序类,包含对应用程序对象一些事件的触发和函数的调用图1基本模型图MethodsPropertiesFieldsMethodsPropertiesFieldsMethodsPropertiesMethodsFieldsMethodsFieldsPropertiesFieldsMethods条件,即和给定的夹具为组合关系并且在外轮廓数据中包含300.
本例中出现的概念和关系是另外一个领域模型,由于篇幅限制,这里没有给出图示.
以上给出的检索只是一个示例,在具体应用中用户可以根据自己的需求来组合编写检索语句.
而且RQL也在不断地丰富和发展,以不断满足更高的语义检索要求.
3.
2.
3数据层的显示我们知道语义模型中不包含具体的数据,如2.
2节所述,在得到检索结果后,通过领域模型中的数据映射定位相对应的数据源信息,最终得到有意义的数据视图.
在实际的应用中,上述检索的过程均为后台操作,而呈现给用户的是可视化的友好的界面,用户只需要输入一些相关的语义参数,就可以得到需要的检索结果,包括一些概念和数据.
4总结在浩如烟海的数据中进行语义层面上的检索是未来一项必不可少的技术.
本文在建立领域模型的基础上,在描述逻辑推理机的支持下,实现了在语义层面的企业数据检索.
在国家"863/CIMS"前沿探索类研究项目,即基于语义与模型的企业异构数据源集成关键算法与实现技术中,我们实现了一个语义模型驱动的异构数据源集成原型系统,它根据本文介绍的方法实现的语义检索系统工作良好.
但是该方法在使用时对用户的要求偏高,对建模的效果和推理机的依赖性较强,因此未来的研究也应该体现在如何提高实用性和对用户的友好性等方面.
参考文献:[1]ridmanN,NoyRFergerson,etal.
TheKnowledgeModelofProte-ge2000:CombiningInteroperabilityandFlexibility[C].
ProceedingsofEKAW2000,France,Springer,2000.
17-32.
[2]DNardi,RJBrachman.
AnIntroductiontoDescriptionLogics[Z],2003-01.
[3]VolkerHaarslev,RalfMoller.
Racer'sUser'sGuideandReferenceManualversion1.
7.
7[EB/OL].
http://www.
racer-systems.
com,2003-09-17.
[4]VolkerHaarslev,RalfMoller.
RacerQueryLanguage[EB/OL].
ht-tp://www.
racer-systems.
com,2003-09.
[5]FranzBaader,DiegoCalvanese,DeborahMcGuinness,etal.
TheDescriptionLogicsHandbook[M].
UK,CambridgeUniversityPress,2003.
5-25.
作者简介:董小峰(1978-),男,陕西西安人,硕士研究生,主要研究方向为企业信息化、语义网络;张树生(1956-),男,山东人,教授,博导,主要研究方向为企业信息化、语义网络、模式识别;赵寒(1980-),男,河南人,博士研究生,主要研究方向为企业信息化、语义网络;周竞涛(1976-),男,辽宁营口人,博士研究生,主要研究方向为企业信息化、语义网络;冯赟(1980-),女,陕西西安人,硕士研究生,主要研究方向为模式识别、信息集成;田占强(1979-),男,山西大同人,学士,主要研究方向为信息集成.
(上接第216页)};}在上述代码中,我们增加了InitInstance()虚方法,当然开发者可以增加必要的可重载方法,然后在MFC应用程序的处理过程中增加对相应方法的调用.
开发者可能需要从一个配置文件中(或者数据库中)获得包含托管应用程序对象程序集、名称空间等的字符串信息,获取该托管对象的类型和方法信息,并激发该方法.
一个配置文件可能是这样的:3结束语一个高质量的软件系统在设计时必须仔细考虑它的可重定制能力,其应用程序模型必须提供可扩展的架构基础,以自然适应不断普及的新技术与需求的日益变化.
提供一种通用的应用系统的开发模型的意义在于,可以提供一种统一的开发过程,屏蔽掉一些琐碎的技术细节,在更合理、更有效的层次上开始自己的软件系统构造.
MDNR模型作为一个应用程序构造的基础模型,经过实践,在组织MFC和.
NET的包括人力、代码等的资源方面是行之有效的.
不熟悉VC++的.
NET程序员也可以使用VB.
NET等高效的开发语言来对原生MFC系统进行定制,人力得到了很好的组织,原生系统的可维护性大大提高.
但这仅是开始,使用这个模型对原生MFC系统进行构造还需要开发者具有很丰富的经验,对系统进行合理的构造和设计.
要使这个模型能更好地帮助软件系统具有动态性、可复用性、可重定制和扩展能力,还有许多工作要做.
参考文献:[1]bouttheDHTMLObjectModel.
MicrosoftCorporation[EB/OL].
http://msdn.
microsoft.
com/library/default.
aspurl=/workshop/author/om/doc_object.
asp.
[2]DocumentObjectModel(DOM)[EB/OL].
http://www.
w3.
org/DOM/.
[3]AbouttheW3CDocumentObjectModel.
MicrosoftCorporation[EB/OL].
http://msdn.
microsoft.
com/library/default.
aspurl=/workshop/author/dom/domoverview.
asp.
[4]ISOStandardC++[EB/OL].
http://www.
ansi.
org/.
[5]TomArcher,NishantSivakumar.
ExtendingMFCApplicationswiththe.
NETFramework.
Reading[M].
NewYork:MA:AddisonWes-ley,2003.
[6]杨芙清,王千祥,梅宏,等.
基于复用的软件生产技术[J].
中国科学(E辑),2001,21(4):363-371.
作者简介:胡子义(1965-),男,讲师,主要研究方向为人工智能、组件技术;梁博,男,硕士研究生,主要研究方向为人工智能、组件技术.
·912·第12期董小峰等:基于语义模型的企业数据检索
ucloud美国云服务器怎么样?ucloud是国内知名云计算品牌服务商家,目前推出全球多地机房的海外云服务器。UCloud主打的优势是海外多机房,目前正在进行的2021全球大促活动参与促销的云服务器机房就多达18个。UCloud新一代旗舰产品快杰云服务器已上线洛杉矶节点,覆盖北美和亚太地区,火热促销中, 首月低至7元,轻松体验具备优秀性能与极高性价比的快杰云服务器。点击进入:ucloud美国洛杉矶...
ProfitServer怎么样?ProfitServer好不好。ProfitServer是一家成立于2003的主机商家,是ITC控股的一个部门,主要经营的产品域名、SSL证书、虚拟主机、VPS和独立服务器,机房有俄罗斯、新加坡、荷兰、美国、保加利亚,VPS采用的是KVM虚拟架构,硬盘采用纯SSD,而且最大的优势是不限制流量,大公司运营,机器比较稳定,数据中心众多。此次ProfitServer正在对...
vollcloud LLC首次推出6折促销,本次促销福利主要感恩与回馈广大用户对于我们的信任与支持,我们将继续稳步前行,为广大用户们提供更好的产品和服务,另外,本次促销码共限制使用30个,个人不限购,用完活动结束,同时所有vps产品支持3日内无条件退款和提供免费试用。需要了解更多产品可前往官网查看!vollcloud优惠码:VoLLcloud终生6折促销码:Y5C0V7R0YW商品名称CPU内存S...
www.mfcclub.net为你推荐
公司网络被攻击网站总是被攻击,该怎么处理啊?www.765.com下载小说地址抓站工具大家在家用什么工具练站?怎么固定?面壁思过?在医院是站站立架www.6vhao.com有哪些电影网站sesehu.comwww.hu338.com 怎么看不到啊lcoc.top日本Ni-TOP是什么意思?www.36ybyb.com有什么网址有很多动漫可以看的啊?我知道的有www.hnnn.net.很多好看的!但是...都看了!我想看些别人哦!还有优酷网也不错...机器蜘蛛求一个美国的科幻电影名!里面有大型的机械蜘蛛。www.cn12365.orgwww.12365china.net是不是真的防伪网站300373一搓黑是真的吗本冈一郎本冈一郎到底有效果吗?有人用过吗?
虚拟主机测评 长沙域名注册 北京服务器租用 高防服务器租用qy sugarhosts hostmaster 国内免备案主机 台湾服务器 外国服务器 godaddy域名优惠码 回程路由 主机合租 服务器托管什么意思 闪讯官网 西安服务器托管 cxz 游戏服务器出租 免费个人网页 睿云 WHMCS 更多