在CVI中如何使用C++语言

来源 :电脑知识与技术·学术交流 | 被引量 : 0次 | 上传用户:xmzhkj
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:介绍了在CVI中通过DLL的方式来使用C 语言的编程方法,给出了实现例子,并验证了其有效性。实现了在CVI中使用C 语言的程序设计。
  关键词:C语言;C 语言;CVI
  中图分类号:TP312文献标识码:A文章编号:1009-3044(2008)15-20ppp-0c
  
  How to Use C Language in CVI
  ZHANG Fu-song
  (Unit 92941 of PLA,Huludao 125001,China)
  Abstract:This article introduced a programming method of using C in CVI through DLL, giving an detailed example and validating itsavailability. The using C language programming in CVI is implemented.
  Key words:C language;C language;CVI
  
  1 引言
  
  LibWindows/CVI是美国国家仪器公司(简称NI公司)推出的交互式C语言开发环境,CVI将功能强大、使用灵活的C语言与用于数据采集分析和显示的测控专业工具有机地结合起来,它的集成化开发环境、交互式编程方法、函数面版和丰富的库函数大大增强了C语言的功能,为熟悉C语言的开发人员建立检测系统、自动测试系统、数据采集、过程监控、虚拟仪器等提供了一个理想的软件开发环境,在我国已经得到了较为广泛的应用。
  而C 语言作为C语言的超集,以其面向对象、封装、继承和多态的特点在软件开发领域后来居上,它的面向对象的特点更符合人们的思维方式,其运行代码要比C语言简洁、易于理解,尤其是新的标准中增加了模板、通用容器、STL(Standard Template Library)算法等内容,模板的引入对C 程序设计者来说是一场革命,自此,C 程序设计焕然一新。
  两种语言各有特点,各有所长,C 语言兼容C语言,对于一个习惯于面向对象设计的程序员来说,CVI是面向过程的语言,用大量的回调函数来处理消息,无疑是一种痛苦,想用别的语言来代替,又有困难,CVI中有很多专有的函数和仪器面版控件,别的软件不能提供替代的产品,那么,能不能即使用CVI来开发软件,又能使用C 的新增功能哪?能,就是通过动态链接库来实现。
  
  2 使用动态链接库(DLL)将C 特性过程化
  
  DLL是一种基于Windows的程序模块,不仅包含函数,还可以包括数据和各种资源,库中的函数可以被应用程序或其它的DLL调用。使用DLL有如下的优点:
  1)如果不同的程序使用相同的DLL,只需在内存中将DLL装载一次,节省了内存。
  2)可以使用DLL的不同版本来代替当前的DLL。只要DLL中子例程有相同的参数,则可以使用新版本的DLL运行程序,而不用重新编译它。
  3)如果有一个非常大且需要不断更新或改正错误的应用程序,则可以将它划分为多个执行部分与DLL。这样允许我们只对需要改变部分进行操作,而不用对整个大执行文件进行改动。
  4)支持多国语言。开发者可将依赖于语言的函数和资源分离出来,建立DLL的不同版本来保存不同语言的字符串,然后在运行时改变语言;或可以设计图标与位图,而后在不同的应用程序中使用它们,这是实现软件商品国际化的一项技术。
  5)DLL独立于编程语言。这意味着在VC 环境中开发的DLL可以在C Builder、VB、CVI等环境下使用。
  可以看出,DLL是由函数组成的。而在面向对象的程序设计中,程序是由不同的对象组成的,程序运行过程就是调用对象的方法;所以,如果我们需要使用C 的新特性,就需要把调用对象的方法改为调用函数,这样,就把调用接口转换成C语言格式了,就可以使用C 的新特性了。
  
  3 实现方法
  
  下面以在DLL中实现C 中的浮点型堆栈stack为例。在C 中使用浮点型堆栈非常简单,只要定义一个stack 类型变量,就可以使用此变量的各种方法了,而在CVI中则必须自己编写两个子程序来实现压栈、出栈的方法。在本例子中,只给出2个函数,分别实现了压栈和出栈的功能。
  1)在VC 环境下新建DLL工程,进入VC ,选择New,选择Projects,选择Win32 Dynamic-Link Library,给出工程名程(本例是DLL),选择一个路径来保存文件,选择OK按钮,进入下一个页面,选择A Simple DLL Project,选择Finish按钮,进入下一个页面,选择OK按钮,则生成有关的框架文件,在左面的小窗口中选择File View菜单,选择Source Files,选择DLL.cpp,双击该文件,如下所示,生成一个框架文件:
  #include "stdafx.h"
  BOOL APIENTRYDllMain( HANDLE hModule,DWORDul_reason_for_call,LPVOID lpReserved )
  {
  return TRUE;
  }
  2)在#include "stdafx.h"语句下面添加如下代码:
  #include
  #include
  stack> stackfloat;//(两个向右的箭头之间要有空格,否则出错)
  extern "C" __declspec(dllexport) voidpush_float(float x)
  {
  stackfloat.push(x);
  }
  extern "C" __declspec(dllexport) float pop_float()
  {
  float temp = stackfloat.top();
  stackfloat.pop();
  returntemp;
  }
  3)选择菜单Build,选择Build DLL,则系统完成编译工作。在工作目录的Debug目录下生成生成了DLL.dll和DLL.lib和其它文件,这两个文件在下面的工作中将会被使用。
  4)退出VC ,运行CVI,新建一个C文件,内容如下:
  #include
  #include
  #include
  extern__declspec(dllimport) voidpush_float(float x) ;
  extern__declspec(dllimport) float pop_float(void);
  int main (int argc, char *argv[])
  { int i; float temp; char cc[40];
  if (InitCVIRTE (0, argv, 0) == 0) return -1;
  for(i = 0 ; i < 10 ; i ) push_float(i 0.5);
  for(i = 0 ; i < 10 ; i ) {
  temp=pop_float() ;
  sprintf(cc,"The pop num is %5.1f",temp);
  MessagePopup ("Using a DLL", cc);
  }
  CloseCVIRTE ();
  return 0;
  }
  5)将VC 生成的DLL.dll和DLL.lib复制到当前的工作目录下,选择工程窗口,单击右键,选择Add File,在新弹出的窗口中选择DLL.lib,选择OK,选择运行程序,则程序会依次显示出栈的数字,程序验证完毕。
  6)以上程序中,CVI在安装时要选择与微软公司的C 编译器兼容模式。
  
  4 可以使用的C 特性
  
  C 还提供了很多提高程序员工作效率的机制和库工具,比如模板(template),包括模板函数和模板类,能让程序员“批量”生产代码。通用算法,包括填充和生成、计数、操作序列、查找和替换、比较范围、删除元素、对已排序的序列进行排序和运算、数值算法。通用容器,包括向量、链表、双端队列。集合、堆栈、单端队列和映像等工具。
  
  5 结束语
  
  通过这种变通的方式,程序员就可以在CVI中使用C 语言中的先进的编程方式和各种便利,节省了时间与精力,可谓一举两得,有兴趣的C 编程人员可以一试。本方法已在某型装备的测试程序中获得应用。
  
  参考文献:
  [1]Bruce Eckel,Chuck Allison.C 编程思想第2卷 实用编程技术[M].机械工业出版社,2006.
  [2]Herbert Schildt.C语言大全[M].郭兴社,戴建鹏,译.电子工业出版社,1990.
  [3]张毅刚,乔立岩.虚拟仪器软件开发环境Lab Windows/CVI6.0 编程指南[M].机械工业出版社,2002.
  收稿日期:2008-03-07
  作者简介:张富松(1967-),男,工程硕士,主要从事导弹测试研究。
其他文献
关键词:上市公司 会计稳健性 财务不端一、引言  在会计信息质量方面的研究中,对会计稳健性的探究成为大家的关注重点。会计稳健性又称之为谨慎性原则,是会计理论的基本原则之一。基本会计准则对会计稳健性是这样规定的,即企业在经济业务活动的确认、计量和报告过程中,不应该高估资产或者收益、低估负债或者成本费用。二、假设的提出  本文提出如下的基本假设:  假设:会计稳健性与财务不端呈显著的负相关关系。三、样
关键词:乡镇卫生院 固定资产 对策  固定资产是一个单位最基础的物形资源,占到单位资产的主要部分,一个单位如何有效的进行固定资产管理,对于保障单位资产安全完整,以及单位效益提升都具有积极的作用。因此,单位应高度重视资产管理的重要性,从制度制定和制度的全面落实的角度出发,强化单位的固定资产管理,提高固定资产管理的有效性,进而为提升单位的效益打下坚实的基础。当前,我国乡镇卫生院进行全面的改革,其社会效
关键词:信用评级 评级机构监管  经过20多年的发展,我国信用评级机构在规模和服务水平方面均有大幅提升,形成了中诚信国际、东方金诚、中证鹏远等大型评级机构和80多家中小型评级机构并存的机构发展格局。但从地方评级机构来看,大部分地方评级机构不同程度的存在弱、小、多、散的问题。找出现行体制下评级机构存在的问题,巩固评级机构与银行之间的合作关系,对促进地方评级机构发展有很强的现实意义。一、H省信用评级机
关键词:中职会计 信息化教学 原始凭证  原始凭证的认知是会计工作中极为重要的一个内容,在发生经济活动时需要对原始凭证做好填制工作,以此记录业务的实际发生内容,因此在经济活动过程中原始凭证能够作为重要资料,对经济活动中的经济责任进行明确,同时对经济业务中的情况做好直观反映,由此可以看出在会计工作中原始凭证是会计工作中的一个重要基础,对于保证会计信息的真实性以及明确经济活动中的责任等方面具有重要作用
摘 要:由于近年来公安民警伤亡严重,对徒手搏击技能越来越重视,随之而来的就是在搏击技能运动中出现的运动损伤问题,该文就是针对在搏击技能训练中出现的运动损伤进行调查研究,分析在搏击技能运动中损伤的发生及其预防的工作,为的是在今后的警务搏击技能运动训练中能减少运动损伤的发生,从而让学生能够更好地进行训练。  关键词:搏击训练 运动损伤 预防  中图分类号:G8 文献标识码:A 文章编号:2095-28
摘 要:警式体育在司法警官职业类院校所开设课程结构当中起到了核心支撑性作用,既然是体育课程必然会涉及学生的体能、技能的练习。从当前各地区司法警官职业学院警式体育的开设现状来看还有很多欠缺的地方,尤其在专项性的练习方面以及训练设施保障方面的完善,能够为之后学生警务技能的掌握和熟练打下坚实的根基。该次研究通过有针对性地对司法警官职业学院当前现状提出合理的意见和方案,为司法警官类院校的体育教学发展提供理
关键词:高校财务 流程再造 信息化  随着高等教育事业的迅速发展,高校外部环境和内部管理体制都发生了很大变化,传统的高校财务管理模式及运行流程正面临着严峻的考验,财务部门的业务量成倍增加,财务工作人员又面临高校机关精简的压力。为适应形势发展的要求,高校财务部门一方面需要加快推进体制机制改革、加强专业团队建设,通过提升服务质量、精简工作程序、完善内控制度来更好地满足学校教学、科研和各项事业发展的需要
摘要:EDA技术综合了现代电子技术和计算机技术的最新研究成果,其设计采用自顶向下的设计方法,通常采用硬件描述语言进行电子电路设计;VHDL语言以其强大的建模和逻辑综合功能成为EDA技术中应用最广泛的硬件描述语言之一。基于VHDL设计了交通信号灯。  关键词:EDA;自顶向下;VHDL;交通信号灯  中图分类号:TP311文献标识码:A 文章编号:1009-3044(2008)15-21050-04
摘要:本文介绍了P2P的工作原理及几个典型,着重分析比较了基于超级节点的和基于区域划分结构的两种P2P模型的特性,最后提出自己的观点。  关键词:P2P网络模型;发现机制;区域划分;身份认证   中图分类号:TP393文献标识码:A文章编号:1009-3044(2008)15-2pppp-0c    Comparison and Research of two P2P Network Models
摘要:交叉表的设计一直是程序开发的难点,充分利用C#2005数据集和数据表的离线功能,我们可以把一张表的数据行变成另一个内存表的数据列,这样我们就可以非常容易地进行数据汇总统计,统计要求符合中国报表特色。  关键词:离线模式;数据集;数据表;交叉表  中图法分类号:TP31 文献标识码:B 文章编号:1009-3044(2008)15-20ppp-0c    Implement CrossTabl