- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
多类型运动控制卡编程方法探讨 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”);
您可能关注的文档
- l化工工艺流程设计.ppt
- l化工原理概况讲义.ppt
- l首届结核病知识竞赛答案.doc
- I多媒体课件制作论文.doc
- I多媒体课件在初中物理教学中的应用.doc
- I关于开展寝室文化活动的实施方案唐.doc
- I多媒体课件在数学教学中的作用 I2).doc
- l勒柯布西耶的住宅空间构成.ppt
- I关于开展岗位和班组安全生产标准化达标工作方案.doc
- I多媒体课件在数学教学中的作用.doc
- 2024年沧州市公务员考试行测真题及答案详解(名师系列).docx
- 粮油食品检验人员复习提分资料带答案详解(精练).docx
- 粮油食品检验人员自我提分评估(考点精练)附答案详解.docx
- 粮油食品检验人员全真模拟模拟题附参考答案详解(精练).docx
- 2025年延安市公务员考试行测试卷历年真题附答案详解(突破训练).docx
- 2025年株洲市公务员考试行测试卷历年真题含答案详解.docx
- 2024年枣庄市公务员考试行测真题及完整答案详解1套.docx
- 2024年抚顺市公务员考试行测真题及答案详解(各地真题).docx
- 2025年常州市公务员考试行测真题及一套参考答案详解.docx
- 2023年德州市公务员考试行测试卷历年真题及1套完整答案详解.docx
文档评论(0)