首页 > 范文大全 > 正文

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

开篇:润墨网以专业的文秘视角,为您筛选了一篇在CVI中如何使用C++语言范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘要:介绍了在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-),男,工程硕士,主要从事导弹测试研究。