欢迎来到天天文库
浏览记录
ID:51702348
大小:42.45 KB
页数:6页
时间:2020-03-15
《多类型运动控制卡编程方法探讨.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、多类型运动控制卡编程方法探讨2008-10-298:57:26【文章字体:大 中 小】推荐收藏打印运动控制卡发展越来越讯速,不同类型的控制卡亦多种多样,使软件项目经理具备越来越灵活的方案选择。而对于软件开人员,对不同的类型卡的性能测试工作无疑也越来越麻烦,通常各类型的控制卡其驱动库函数各不一样,都需要用户自己进行整理封装。本文的目的就是通过C++方式编程,探讨一下实现多类型卡编程方式,以供开发人员参考。一、利用C++虚拟函数机制除了手动去单个修改替换以前卡的驱动函数之外,此方法最易被C++程序员所想起,
2、其方法是,首先需要建立一个通用的基类(父),然后不同卡封装的类通过重写基类的虚拟函数来实现,代码看上去大致如下:classCDviece//用户根据自己的设置建立的基类{public:virtualintInitBoard();//在此仅以初始化函数为例…(略)};classCDmc1000Card:publicCDviece//设该卡为雷赛的DMC1000卡{public:virtualintInitBoard(){returndmc1000_init_board();}//改进基类的InitBoar
3、d函数…(其它改写略去)}classCOMS:publicCDviece//设该卡为美国的OMS卡{public:virtualintInitBoard(){}…(其它改写略去)}在程序中,若想设备使用DMC1000控制卡,可定义如下:CDviece*pMineDviece=newCDmc1000Card;改为OMS控制卡则一样:CDviece*pMineDviece=newCOMS;而其它代码调用InitBoard函数可以不去改动,照常使用:if(pMineDviece->InitBoard()){…
4、(Dos.th)}使用此方法,需要根据当前设备配置情况,完整的写好CDviece的所有函数,同样,从CDviece派生的控制卡类,也需要将父类虚拟函数全部改写完毕,对函数返回值,参数都需要进行规范,同时,修改完成之后,将整个软件工程全部编译一次。利用虚拟函数方法,会带来虚拟函数表的成本开销,随着CDivece需要的函数增加,其成本会相应的增加,事实上,MFC的消息机制就是以代码的方法实现了虚拟函数的机制,只不过虚拟函数的处理是通过C++编译器来完成的。并且,CDviece的需求发生变化时,其派生类的函数
5、相应的也要发生变化,这一点是程序员需要注意的。二、利用DLL动态库实现从COM组件编程过来的人,很容易想到DLL的实现方案。看重这一点是的只要主程序框架写得正确,改变DLL即可实现主程序不编译,即可获得不同类型卡的选择。事实上,这是一种美好的愿望,要实现起来并不容易,而且很需要程序员有熬夜的精神。大致伪代码实现如下:classCDviece{private:HANDLEdllHandle;public:typedefint(*P_InitBoard)(void);P_InitBoardInitBoard
6、;…(其它所有定义及声明略去)intInitFunction(char*dllFileName)//调用DLL文件{dllHandle=LoadLibaray(dllFileName);InitBoard=(P_InitBoard)FindFunction(dllHandle,“Init_Board”);…(其它略去)}}由于不同卡的函数名都不一样,故需要程序员按照CDviece所需函数进行另一DLL的编写,若需要DMC1000控制卡时,则需要生成一个MDMC1000.dll如下:intInitBoar
7、d(){returndmc1000_board_init();}…(其它略去)生成OMS控制卡的MOMS.dll如法炮制:intInitBoard(){}…(其它略去)在代码中调用DMC1000控制卡,使用如下:CDviecemineDviece;mineDviece.LoadLibaray(“Mdmc1000.dll”);if(mineDviece.InitBoard()){…(Dos.th)}使用OMS控制卡如下:mineDviece.LoadLibaray(“Moms.dll”);…(其它略去)看
8、似简单,实质上略去的部分将是程序员的一场恶梦,想一想那一大堆的定义和声明,一碰到CDviece的变动,哪怕是最小的函数返回值或参数变动,则其它相应的所有DLL都需跟全部编译。这无疑给软件项目的整个维护带来极大的难度。三、利用模板类实现探讨到现在,本人比较推荐的就是使用此方法,它较虚拟函数相比无额外成本的开销,更不有因为虚拟函数带来的效率问题。与DLL方法相比,定义声明,及变动性都非常良好,整个维护的成本也较低。其编程特点即是,通过模板定义一
此文档下载收益归作者所有