- 2
- 0
- 约3.69千字
- 约 6页
- 2017-02-08 发布于北京
- 举报
多类型运动控制卡编方程法探讨
多类型运动控制卡编程方法探讨 2008-10-29 8:57:26 【文章字体:大?中?小】 推荐 收藏 打印
运动控制卡发展越来越讯速,不同类型的控制卡亦多种多样,使软件项目经理具备越来越灵活的方案选择。而对于软件开人员,对不同的类型卡的性能测试工作无疑也越来越麻烦,通常各类型的控制卡其驱动库函数各不一样,都需要用户自己进行整理封装。本文的目的就是通过C++方式编程,探讨一下实现多类型卡编程方式,以供开发人员参考。 一、利用C++虚拟函数机制 除了手动去单个修改替换以前卡的驱动函数之外,此方法最易被C++程序员所想起,其方法是,首先需要建立一个通用的基类(父),然后不同卡封装的类通过重写基类的虚拟函数来实现,代码看上去大致如下: class CDviece//用户根据自己的设置建立的基类 { public: virtual int InitBoard(); //在此仅以初始化函数为例 … (略) }; class CDmc1000Card: public CDviece // 设该卡为雷赛的DMC1000卡 { public: virtual int InitBoard() { return dmc1000_init_board(); }//改进基类的InitBoard函数 …(其它改写略去) } class COMS: public CDviece //设该卡为美国的OMS卡 { public: virtual int InitBoard() { } …(其它改写略去) } 在程序中,若想设备使用DMC1000控制卡,可定义如下: CDviece *pMineDviece = new CDmc1000Card; 改为OMS控制卡则一样: CDviece *pMineDviece = new COMS; 而其它代码调用InitBoard函数可以不去改动,照常使用: if( pMineDviece-InitBoard() ) { …(Do s.th) } 使用此方法,需要根据当前设备配置情况,完整的写好CDviece的所有函数,同样,从CDviece派生的控制卡类,也需要将父类虚拟函数全部改写完毕,对函数返回值,参数都需要进行规范,同时,修改完成之后,将整个软件工程全部编译一次。 利用虚拟函数方法,会带来虚拟函数表的成本开销,随着CDivece需要的函数增加,其成本会相应的增加,事实上,MFC的消息机制就是以代码的方法实现了虚拟函数的机制,只不过虚拟函数的处理是通过C++编译器来完成的。 并且,CDviece的需求发生变化时,其派生类的函数相应的也要发生变化,这一点是程序员需要注意的。 二、利用DLL动态库实现 从COM组件编程过来的人,很容易想到DLL的实现方案。看重这一点是的只要主程序框架写得正确,改变DLL即可实现主程序不编译,即可获得不同类型卡的选择。 事实上,这是一种美好的愿望,要实现起来并不容易,而且很需要程序员有熬夜的精神。大致伪代码实现如下: class CDviece { private: HANDLE dllHandle; public: typedef int( *P_InitBoard)(void ); P_InitBoard InitBoard; …(其它所有定义及声明略去) int InitFunction( char *dllFileName )//调用DLL文件 { dllHandle = LoadLibaray( dllFileName ); InitBoard = (P_InitBoard)FindFunction(dllHandle, “Init_Board”); … (其它略去) } } 由于不同卡的函数名都不一样,故需要程序员按照CDviece所需函数进行另一DLL的编写,若需要DMC1000控制卡时,则需要生成一个MDMC1000.dll如下: int InitBoard() { return dmc1000_board_init(); } …(其它略去) 生成OMS控制卡的MOMS.dll如法炮制: int InitBoard() { } …(其它略去) 在代码中调用DMC1000控制卡,使用如下: CDviece mineDviece; mineDviece.LoadLibaray(“Mdmc1000.dll”); if( mineDviece.InitBoard() ) { …(Do s.th) } 使用OMS控制卡如下: mineDviece.LoadLibaray(“Moms.dll”);
您可能关注的文档
- 夏桥镇中心学校阅读展开情况的汇报材料.doc
- 七年级语文下册第11课邓《稼先》教案人教新课标版.doc
- 夏沫的一百句简约简不单.doc
- 夏普1818各种码代解决方法.doc
- 七年级语文下册第14课鲁《提辖拳打镇关西》练习鄂教版.doc
- 夏洛的班级读书会夏的洛班级读书会教学设计.doc
- 七年级语文下册第24课一你定会听见的教学设计鲁教版.doc
- 夏消防安全百攻坚动行方案.doc
- 夏热冬暖地区居住建屋筑顶保温措施.docx
- 七年级语文下册第25课诗《词五首》教案(语文版).doc
- 宠物行业新品趋势-炼丹炉x淘天集团-202601.docx
- 2025空间智能软件技术大会:GIS+燃气:智慧燃气行业数字化转型.pptx
- 2025年AI治理报告:回归现实主义.docx
- 2025医疗科技领域AI应用:驾驭变革与机遇研究报告 Artificial Intelligence in Medtech Navigating Change and Opportunity.docx
- 2026年50大科技趋势前瞻报告 The Top 50 Technology Trends.docx
- 数字电网无人机巡检解决方案.docx
- 人工智能企业综合能力评价规范(平台化视角)(征求意见稿).docx
- 中国经济复盘与展望:“反内卷”与结构突围.docx
- 爷爷不泡茶茶饮品牌小红书平台推广方案.pptx
- 2026年美中AI市场竞争态势与DeepSeek的突围(中文).docx
最近下载
- 党员谈话谈心记录内容一对一.docx VIP
- saej1268淬透金属规范.docx VIP
- PPAP审核报告&审核要点检查表.pdf
- 财务共享中心建设.pptx VIP
- 代谢性脑病多学科决策模式中国专家共识(2025版).docx VIP
- 上海市浦东新区2026届初三一模英语试题(含答案).docx
- 腰椎间盘突出症诊疗指南中华医学会骨科学分会脊柱外科学组、中华医学会骨科学分会骨科康复学组(发布时间:2020-04).pdf VIP
- 无人机应用技术专业课程标准(技工口).pdf VIP
- 2025-2026 学年第二学期 小学六年级 浙教版 科学 下册 期末试卷.docx
- XX市司法局工作汇报】 司法局工作汇报.doc VIP
原创力文档

文档评论(0)