关于在C++Builder中集成Labwindow功能模块的研究

合集下载

C_Builder调用Matlab工具箱技术及其应用

C_Builder调用Matlab工具箱技术及其应用

科技广场2007.1162als页面,在Include Path中,加入目录路径<Matlab>\extern\include,该路径包含了engine.h和matlab.h等有用的头文件。

在Library Path中,加入<Matlab>\bin和<Matlab>\extern\include,这两个目录路径包含了可外部调用的DLL和LIB文件。

点选Project|Add to Project…对话框,加入前面生成的库文件: _libeng.lib、_libmat.lib和_libmx.lib。

在进行了上述必要的设置后,就可以在BCB的开发界面中编写适当的函数来实现评价系统这一目标了。

2.2数据交换为实现计算机信息化,指标数据都应该建立相应的数据库文件。

BCB应用程序主要是通过数据库引擎(BDE)来访问本地和远程数据库,由于BCB程序不能以矩阵形式和Matlab进行数据通信,为了解决此问题,应该引入一个.dat格式的数据文件,起到桥梁作用。

应用程序先将.db格式的数据库数据读入到数据文件中,然后Matlab从数据文件中读取数据,并将结果保存并返回到BCB界面,最后转存到指定的输出数据库中。

图一数据交换过程BCB开发环境中有两个数据库部件页用来实现数据库的访问和控制,根据实际需要,用桌面数据库(databasedesktop)来建立数据库。

采用Paradox类型,其具有设置密码、有效性检查、确认关键字、确保引用一致等众多优点。

把相应的VCL构件加入工程当中,设置好工作路径和数据库别名后,就可以在软件开发界面下编写函数进行数据交换。

3关键源代码3.1读入数据库指标信息用数据挖掘等技术处理后生成标准的计算机能够识别的数据。

TTable *table1 =new TTable(this);table1->DatabaseName="D:\ProgramFiles\Borland\program\database" ;//设置路径table1->TableName="data1.db";table1->Active=true; //打开数据集while(!table1->Eof){String s;s+=table1->FieldByName("X1")->AsString+" ";//按字段读取信息,以空格分隔……. //顺序读一行所有信息及分析处理fprintf(fp,"%s\n",s);//写入一个.dat数据文件i=table1->RecordCount;//取得字段数,即列数table1->Next();j++; //获得数据库的行数}3.2神经网络的学习对BP神经网络的训练及检验过程主要是由Matlab设计完成。

C++builder与MATLAB混合编程实现实时数据处理

C++builder与MATLAB混合编程实现实时数据处理

C++Builder与MATLAB混合编程实现实时数据处理郭丽娟(石家庄机械化步兵学院信息指挥教研室,河北石家庄050083)摘要:利用MATLAB提供的Engine接口实现在C++Builder中完全操作MATLAB,克服了单独使用C++Builder开发时在运算和显示方面所带来的不便。

并以C++Builder与MATLAB数据转换为例,分析说明了MATLAB引擎技术与C++ Builder互连实现实时数据处理。

关键词:Borland C++Builder;MATLAB引擎;数据转换中图分类号:TP31l文献标识码:A文章编号:1673-1131(2013)09-0103-02C++Builder(简称为CB)开发界面简单、执行效率高,具有可视化编程的便利性,功能丰富强大,许多编程者都用它来开发软件。

但在开发软件时,各种信号处理的函数均需要自行编制,不仅使得开发工作量大幅增加,而且不易保证程序的准确性。

[1]Matlab是功能非常强大且高度集成的数学软件,它集科学计算、图像处理等功能于一体,具有极高的编程效率,被广泛应用于数字信号处理、时间序列分析、动态系统仿真等方面。

但该语言的执行效率较低,且不能生成在Windows下直接运行的可执行文件。

鉴于以上原因,笔者在实际应用中,将CB与Matlab进行混合编程用CB可以开发出简单实用的界面,又可以利用Mat-lab一些与信号处理相关的函数,大大减少编程的工作量,保证程序的准确性。

1CB与Matlab的混合编程目前常用的CB与Matlab混合编程的方法主要有两大类方法。

一类便是利用Matcom(MIDEV A)来实现。

Matcom提供了Matlab中m文件与其他高级语言的接口,使m文件可以编译为脱离Matlab环境独立执行的可执行性程序,提高了代码的复用率和代码的执行速度。

但是不是所有的MA TLAB函数都能使用这种方法调用,特别是一些工具箱函数不能转换为C+ +代码,对图形库的支持也十分有限,对于实时采集的数据不能处理,不能成为通用的方法。

C++builder

C++builder

C++Builder的基本功能我们用高级语言写程序,我们很得意,因为高级语言比较接近人类的语言,使我们用起来得心应手,所以我们当然得意。

但我们更得意的一定是让程序代码赶快变成可执行文件。

无论是在写代码的过程,还是最后要编译成可执行文件,都需要有一个工具存在。

这一工具一般称为编程集成环境(IDE)。

之所以称为集成,是因为从写代码到最后软件的出炉,我们需要它的地方实在太多了,这里列出其中最重要的功能项。

1、代码编辑:方便的代码编辑功能。

尽管你可以使用记事本、Word或其它任何文本编辑器来写代码,但除非特殊需要,否则那将是极为低效的方法。

相反,现在的编程集成环境,都相当的智能,举例如:代码自动功能,可以在很多情况下自动完成我们所需的代码,既准确还迅速。

Borland公司出品的编程集成环境不仅有常见的关键字高亮等功能,还支持代码模板,支持键盘宏,同样支持高级的脚本插件功能。

2、界面设计:可视化的程序界面设计功能。

你所要产生的窗口,在设计期间就真实地出现,包括字体、颜色和定位。

比如:你不仅可以插入falsh的动画,而且无需运行,就直接可以在你的界面上看到该动画的演播,这是别的编程环境不能做到的。

3、程序编译:这是编程工具的主要功能。

我们写的代码在成为机器能懂的可执行程序时,必须通过编译。

4、程序调试:如何尽量减少你程序的BUG呢?没有编程集成环境提供的强大调试功能,我们做的程序将毫无质量保证。

5、代码优化:Borland 提供的编译器,不仅在编译速度上一直在美国屡获大奖,而且其代码自动优化功能一直领先对手几近一个时代。

使用编程集成环境,我们可以轻松获得更快更优的最终可执行程序文件。

6、辅助程序安装:程序的安装已属于另外一种工具的范畴,但我们仍可以通过编程集成环境来决定最终生成单一可执行文件,还是带有其它动态库。

如果是后者,我们还可以通过集成环境来检查程序运行时调用了哪些动态库文件。

C++Builder 提供的功能远不止我上面所说的,并不是因为我嘴笨,而是我认为对一个工具,你只有动手使用,才会真正了解它。

实验一C++Builder开发平台学习与应用(课件教案)

实验一C++Builder开发平台学习与应用(课件教案)

实验一C++ Builder6.0开发平台学习与应用一、实验目的通过一个简单的实例,让同学们熟悉C++Builder集成开发环境,掌握利用C++Builder进行应用程序开发的步骤,初步能完成简单的程序设计,掌握基本的调试手段和调试方法,熟悉简单控件的使用方法。

二、实验设备1台PC、CB6开发环境等。

三、实验内容1、了解BCB的一些基本情况;2、了解BCB的界面及常用组件的使用方法;3、开发一个简单的应用例子四、实验内容1——BCB基本情况的了解(1)BCB的定位语言工具应根据自身情况和目标进行选择,没有最好的工具,各种工具都有用。

BCB定位于Windows桌面应用程序开发,有强大的可视化开发能力,界面开发快;对于桌面数据库开发有一定的优势;开发系统级程序(驱动程序)非常困难。

(2)BCB与其它语言的比较1)与Delphi的比较》由于Windows是由C语言写成,较Delphi调用API(应用程序接口)更为方便;》更适合有C语言基础的程序员;》比Delphi的资源更丰富;2)与VC++的比较》它们使用了不同的程序框架,VC++使用MFC(微软基础类库),BCB使用VCL(可视化组件库)》从层次上VCL优于MFC,能做到快速开发;》不过MFC与Windows同出一门,MFC有微软的强力支持;》VC++跨平台的兼容性更好;》VC++运行时间长,积累的资源最多;》C++是一种语言标准,好比图纸,而BCB与VC++则是根据这一图纸生产的不同的产品;(3)重要的不可视组件与BCB类1)AnsiString是功能很强的字符串类,利用构造函数可以从其它类型生成AnsiString类型;可以用+进行连接,还重载了<,>,<=,>=,!=等运算符,除进行字节比较外,还可以用AnsiCompare方法进行中文比较;2)Tstrings与TStringList用于访问多行文本,可以看到Lines属性就是Tstrings类对象指针;Tstrings类的Strings属性就是一个AnsiString类对象的数组;本质上是一个double类型的浮点数;0 ------- 1899年12月30日零点计时起点37750.9240272338 ---- 2003年5月9日22点10分35秒整数部份----------距离计时起点的天数小数部份-----------当前时间与全天24小时的比值可以将TDateTime对象用作浮点数,也可以把浮点数转换成TDateTime,实际上可以方便地在时间类型与其它类型间完成转换;用Now()函数可以取当前时间;用DayOfWeek可以取出星期0 1 2 3 4 5 6Sunday Monday Tuesday Wednesday Thursday Friday Saturday(4)BCB6的一般编程步骤Ø File|New开始一个项目Ø 设计界面,设置组件属性Ø 撰写组件事件处理程序Ø 运行程序Ø 对程序中的错误进行调试和修改Ø 在上面的过程中不要忘记随时保存文件(5)BCB6的特色Borland C++Bilder 6.0是Interprise(Borland)公司推出的基于C++ 语言的快速应用程序开发(Rapid Application Development,RAD)工具,它是最先进的开发应用程序的组件思想和面向对象的高效语言C++融合的产物。

C++builder 窗体设计

C++builder 窗体设计

第4讲窗体设计1 基本概念C++ Builder应用程序的界面主要是通过窗体来设计的。

窗体是C++ Builder构造程序的基础,是其它VCL组件的容器。

在一定意义上,可以认为:程序在运行时的窗体就是窗口。

PS:在Windows编程中,窗体和窗口是两个不同的概念。

窗体只是窗口的一个子集,按钮、菜单、单选框等都是一个窗口。

Windows系统可以识别窗口,并为窗口的操作调用函数。

当系统有事件发生,通知消息会发往相应的窗口,由窗口做出相应的响应。

也就是说,系统的每个窗口均有相应的函数来处理窗口的所有事件。

PS:在Windows系统中,有一个内核对象包含着每个应用程序所建立的窗口的列表,并赋给每个窗口一个唯一的值,这个值称为窗口的句柄(Handle)。

大部分应用程序都是通过窗体上的文字、图形图像、选择按钮以及菜单、工具条等控件和用户进行交互的。

目前,随着多媒体和因特网的发展,窗体也顺应这种趋势,较以往的窗体有了一些改变。

窗体设计器是C++ Builder最实用、功能最强大的特征之一,它也是C++ Builder可视化开发环境的表现。

使用窗体设计器,可以简单便捷地创建几乎所有的交互界面。

2 窗体的常用属性在C++ Builder中,窗体是从TForm类继承的子类的对象,TForm类是VCL中的标准窗体类,它代表了一个空的窗体。

TForm类有下列常用的属性(不要强制记忆,用熟了自然会记住。

现在记不住怎么办?查帮助。

):●AlphaBlend属性该属性用来设置窗体是否以半透明的方式来显示。

●AlphaBlendValue属性该属性指定了窗体以半透明方式显示时的透明度。

●BorderIcons属性该属性指定了窗体是否具有最小化、最大化、关闭等系统按钮。

●BorderStyle属性该属性指定了窗体边界的特性,如是否为可调整大小等。

●Caption属性该属性指定了窗体的标题。

我们在第一讲中已经使用到了此属性。

●ClientHeight属性该属性用于设置窗体客户区的高度,单位为像素。

clabel mfc用法

clabel mfc用法

clabel mfc用法
CLabell控件是MFC框架中的一个类,用于在对话框或视图中
显示文本或图标。

它通常用于显示静态文本或图标,并且不接受用
户输入。

CLabell控件可以在设计时或运行时设置文本、字体、颜色、对齐方式等属性。

在MFC中使用CLabell控件,首先需要在对话框或视图类中声
明一个成员变量,类型为CLabell。

然后在OnInitDialog函数中使
用SubclassDlgItem函数将CLabell控件关联到对话框中的一个静
态文本控件或者视图中的一个矩形区域。

使用CLabell控件可以通过SetWindowText函数设置文本内容,通过SetFont函数设置字体,通过SetTextColor函数设置文本颜色,通过SetBkColor函数设置背景颜色等。

此外,还可以使用SetIcon
函数设置图标。

除了设置属性,CLabell控件还可以响应一些事件,比如鼠标
点击事件、双击事件等。

可以通过重载相应的消息处理函数来实现
对这些事件的处理。

总之,CLabell控件在MFC框架中是一个非常常用的控件,用
于显示静态文本或图标,并且具有丰富的属性设置和事件响应功能,能够满足各种界面显示的需求。

如何使用C#编程构建Windows应用程序

如何使用C#编程构建Windows应用程序随着计算机科学的发展,编程已成为无数计算机科学爱好者和专业开发人员所关注的重要领域。

C#编程语言得益于其主要特性,如面向对象编程、多线程、高度安全性等,已成为最受欢迎的编程语言之一。

在Windows开发中,C#作为主要编程语言之一,具有广泛的应用。

本文将从入门级别出发,向您展示如何使用C#编程构建Windows应用程序。

准备工作使用C#编写Windows应用程序,前提是必须有一个Visual Studio开发环境。

在本文中,我们将使用Visual Studio 2019作为示例。

确保您已在计算机上安装了Visual Studio 2019,以及C#和.NET框架。

这些都是Visual Studio 2019内置的,所以只需确保安装Visual Studio即可。

现在让我们开始使用C#编程构建Windows应用程序。

创建一个Windows应用程序首先,打开Visual Studio 2019,并选择“新建项目”,然后选择“C#”并选择“Windows桌面”选项。

接着,在“创建新项目”中,您需要为您的项目命名并选择所需的模板。

通常,在Windows应用程序中,您可以选择“Windows Forms应用程序”模板。

在新建项目之前,请确保将目标框架设置为最新版本的.NET Framework即“目标框架”为“最新版本”。

创建Windows Form应用程序之后,Visual Studio将自动为您创建一个默认窗体(称为“Form1”)。

按F5运行程序,您将看到一个空窗体该如何显示在窗口中。

接下来,我们将开始自定义您的Windows窗体应用程序。

自定义Windows Form应用程序当程序一启动,窗体将显示在屏幕上,并包含一个标题栏和一个关闭按钮。

修改窗体的名称,以更好地说明该窗体的目的。

默认情况下,该窗体的名称为“Form1”,您可以更改它,如“MainWindow”。

C++builder中关于窗体的一些操作

C++builder中关于窗体的一些操作C++ builder 中关于窗体的一些操作(总在最前,遍历控件...)一、让窗口总是在最前面Form 的FormStyle属性设置为fsStayOnTop值。

二、动态调用窗体Form在缺省情况下,由File/New Form生成添加入项目文件中的窗体都具有"Auto Create"(自动创建)的特性。

即只要程序运行,该窗体就存在于内存中了,不管当前它是否被调用。

具有这种特性的窗体一般适用于窗体属性比较固定、经常被调用的情况。

其优点是速度快,缺点是占用内存。

在实际程序设计中,会遇见大量类似对话框功能的窗体,它们用于显示状态或输入信息,仅须在程序中调用一下,完成其功能就行了,无需常驻内存。

这时可以通过选择Project/Options/Forms,将"Auto--Create forms " 栏中相应的窗体, 如Form1,用" >" 键移动到"Available forms"栏中,并在程序需调用该窗体处,加入下列语句:TForm1 *myform=new TForm1(this);myform- >ShowModal();delete myform;窗体Form1仅是在需要调用时才调入内存,调用完成后,即用delete清除出内存。

这样可减少程序对内存资源的占用。

三、遍历窗体控件的方法要访问或修改窗体上的控件,方法很简单,以TEdit为例子:Edit1- >Text="";Edit2- >Text="";但如果窗体上有十来个像Edit1 这样的控件,需要进行相同的初始化,用上面的方法一个一个地进行,岂不麻烦!所以有必要掌握遍历窗体控件的方法。

在介绍该方法之前,让我们先了解一下窗体Form 的Components 和Controls 属性。

补充2:C++Builder窗体组件属性与事件简介

主讲教师: 主讲教师:张鹏祥
补充2:C++Builder组件属性设置 补充2:C++Builder组件属性设置 2:C++Builder
可视化窗口操作设置组件属性
在设计时设置属性一般是通过属性窗口来进行的。在属 在设计时设置属性一般是通过属性窗口来进行的。 性窗口设置组件属性的操作步骤如下: 性窗口设置组件属性的操作步骤如下: 1) 打开相应对象的属性窗口。 ) 打开相应对象的属性窗口。 2) 从属性列表中选定属性名称。 2) 从属性列表中选定属性名称。 3) 在属性窗口的右列输入或选择新的属性值。 ) 在属性窗口的右列输入或选择新的属性值。
图像组件尚有以下属性: 图像组件尚有以下属性: 尚有以下属性 Picture:调入图形文件 调入图形文件(.jpg、.jpeg、.bmp、.ico、.emf等 调入图形文件 、 、 、 、 等 等格式) 等格式 Center:图形是否在中心 图形是否在中心
主讲教师: 主讲教师:张鹏祥
补充2:C++Builder组件属性设置 补充2:C++Builder组件属性设置 2:C++Builder
七、选择按钮组件属性
选择按钮分单选和复选两类, 选择按钮分单选和复选两类,他们的如下属性 与窗体属性基本一样: 与窗体属性基本一样: Caption、Name、Enabled、Visible、 Caption、Name、Enabled、Visible、 Height,Width,Top和 Height,Width,Top和Left
主讲教师: 主讲教师:张鹏祥
补充2:C++Builder组件属性设置 补充2:C++Builder组件属性设置 2:C本编辑框的如下属性与窗体如下属性基本一样: 文本编辑框的如下属性与窗体如下属性基本一样: Name、Enabled、Visible、Height,Width,Top和 、 、 、 和 Left Font、Color、AutoSize 、 、 文本编辑框尚有以下属性: 文本编辑框尚有以下属性: ImeMode:输入法类型 :

c++builder数据库开发经典案例解析

c++builder数据库开发经典案例解析目录1. 引言1.1 背景和意义1.2 结构概述1.3 目的2. 基本概念介绍2.1 C++Builder简介2.2 数据库开发概念与原理2.3 经典案例解析的重要性3. 经典案例1:学生信息管理系统3.1 实现思路和需求分析3.2 数据库设计与建模3.3 编码与功能实现细节4. 经典案例2:图书借阅管理系统4.1 实现思路和需求分析4.2 数据库设计与建模4.3 编码与功能实现细节5. 结论与展望5.1 主要研究结果总结5.2 存在的问题与改进方向提出引言1.1 背景和意义随着信息技术的飞速发展,数据库已成为各个领域中不可或缺的组成部分。

数据库开发是利用计算机系统进行数据管理和处理的关键任务之一。

而C++Builder作为一种强大而灵活的开发工具,广泛应用于软件开发领域。

本文将通过经典案例解析的方式,探讨C++Builder在数据库开发中的应用。

通过深入剖析两个经典案例:学生信息管理系统和图书借阅管理系统,我们可以了解到C++Builder在实际项目中的优势和应用方法。

1.2 结构概述本文将按照以下结构展开:•第一部分:引言。

介绍本文的背景、意义以及文章结构。

•第二部分:基本概念介绍。

对C++Builder和数据库开发的相关概念进行简要概括,并说明经典案例解析对于理解这些概念的重要性。

•第三部分:经典案例1:学生信息管理系统。

详细阐述该系统的实现思路与需求分析,以及数据库设计与建模过程,最后介绍编码与功能实现细节。

•第四部分:经典案例2:图书借阅管理系统。

类似地,我们将深入分析该系统的实现思路与需求分析,数据库设计与建模过程,并介绍编码与功能实现细节。

•第五部分:结论与展望。

总结本文的主要研究结果,并提出存在的问题和改进方向。

1.3 目的本文旨在通过对C++Builder数据库开发经典案例的解析,帮助读者理解C++Builder在实际项目中的应用。

通过学习这些经典案例,读者可以熟悉数据库开发的基本概念和原理,并掌握C++Builder在处理数据库相关操作时的技巧和方法。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第13卷专辑军械工程学院学报 Vol.13 Supp2001年11月Journal of Ordnance Engineering College Oct 2001关于在C++Builder中集成面向虚拟仪器的Labwindows/CVI功能模块的研究刘金宁杨锁昌方新(军械工程学院导弹工程系,河北石家庄050003)摘要:把Labwindows/CVI的虚拟仪表设计和C++Builder强大的开发功能结合在一起,实现了良好的测试效果、数据管理和人机交互设计,以Labwindows/CVI作为测试工具,通过动态链接库(DLL)的形式实现了与C++Builder的集成开发。

关键词:Labwindows/CVI;C++ Builder;动态链接库;虚拟仪表目前,基于VXI、PXI、GPIB总线结构和Labwindows、Labview、HP VEE等编程平台的虚拟仪器设计不断涌现,而这几种平台存在一个共同点是:仪器控制能力很强,虚拟面板设计思想突出,数据采集、分析方便,但对数据库操作、数据打印、多媒体实现及仿Windows界面设计上略显不足,本文针对这一点,把Labwindows的虚拟仪器设计作为可被C++ Builder调用的动态链接库(DLL),将Labwindows 和C++ Builder集成在一起,实现良好的仪器控制和外围开发功能。

1 Labwindows/CVI的动态链接库在Windows编程设计上,用动态链接库(DLL)实现程序间的互连既达到了程序的模块化设计、又使多平台间可实现快速、便捷的互相调用,达到良好的移植、兼容效果。

Labwindows/CVI是良好的虚拟仪器开发平台,可对仪器进行方便的控制,实现数据的采集、显示、分析等功能。

若能把它与其它编程平台结合起来将对虚拟仪器编程带来极大的方便。

原则上Labwindows/CVI编译的动态链接库可与任意平台进行集成,只要在编译动态链接库的import library文件时选择与外围平台兼容的模式,而且用Labwindows/CVI自己提供的办法解决如数据类型、参数传送方式等兼容问题就可以,如不同平台对于“结构”数据类型默认元素的个数有不同的定义,在Labwindows/CVI中可用#pragma pack进行不同的设定,以实现兼容。

DLLMain函数规定了Labwindows/CVI动态链接库的调用机制,所以在每个动态链接库中均包括一个DLLMain函数,当编辑完动态链接库的仪器界面和源代码后,用Generate dynamic link Library命令就可以实现动态链接库的编译、链接,生成动态链接库及其.lib文件。

2 Labwindows/CVI的动态链接库与C++ Builder的集成C++ Builder是Borland公司推出的继Delphi之后的又一功能强大、操作简单的编程平台,它在以BDE为引擎的数据库编程方面有控制灵活、操作简便的特点,把它与Labwindows/CVI的仪器控制、数据采集结合起来会实现良好的虚拟仪器开发。

把通过Labwindows/CVI编程进行测试所得到的数据送到C++ Builder的后台数据库有多种办法,如DDE连接、DLL链接、外围模块调用等,其中DLL链接是最好的,它操作简单,速度最快、最灵活,而且不用考虑兼容问题。

收稿日期:2001-10-152.1 Labwidows/CVI的动态链接库生成格式和运行机制用Labwindows/CVI的Generate dynamic link Library命令生成动态链接库时,系统会提供诸多选项以供选择,如生成动态链接库的存储路径、输出函数选择、外围库链接选择等,当在其他程序中实现了动态链接库的调用后,若Labwindows/CVI用Include File Method 方式生成动态链接库,则外围程序可以调用Labwindows/CVI头文件中声明的全局变量和函数,若用Export Qualifier Method方式,则可调用带有输出标记_declspec(dllexport或export)的函数、变量,并均需在头文件中声明。

在Labwindows/CVI的动态链接库被其他程序调用时,动态链接库有自己的运行机制,它会在自己的主函数DLLMain()中定义两个事件句柄――PROCESS_ATTACH和PROCESS_DETACH,前者在启动时由系统触发,调用InitCVIRTE()进行引擎机制的初始化,后者在调用结束时由系统触发,调用CloseCVIRTE()释放动态链接库所占用的内存。

然而在调用多个动态链接库时PROCESS_DETACH信息容易造成混乱,Labwindows/CVI的Run-time Engine中提供了一RunStateCallback()函数,可对程序的执行情况进行纪录,如开始、结束、中断、重复执行等,但很可惜这一机制在外围平台上无法运行,为此Labwindows/CVI 提供了另一种机制,那就是即用即放,与此相关有一CVIRTEHasBeenDetached()函数,在调用完动态链接库中的函数后就调用此函数,它会一直返回FALSE直到当前动态链接库接受到PROCESS_DETACH 事件以释放资源后才返回TRUE。

CVIRTEHasBeenDetached()在cvirte.dll中,可用加载cvirte.h的方法实现调用。

2.2 Labwindows/CVI的动态链接库在C++ Builder中调用C++ Builder调用Labwindows/CVI的动态链接库象调用自己的动态链接库一样,有显式连接和隐式连接两种,其中隐式连接是通过动态链接库的import library file(.lib文件)实现,.lib文件在Labwindows/CVI生成动态链接库的同时生成,而显式连接是通过C++ Builder的Loadlibrary函数实现。

利用Labwindows/CVI可设计出良好的仪器操作界面,它是虚拟仪器设计中最关键的部分,但这同时也给动态链接库的调用带来了困难,因为外围平台在调用Labwindows/CVI的动态链接库时,共用户界面库只在调用程序的函数列表中查找与动态链接库的.UIR文件中包含的函数相匹配的函数、变量声明,这就直接导致了外围平台找不到在.UIR文件中有但不被动态链接库输出的函数、变量,发生链接错误。

然而Labwindows/CVI提供了解决这一问题的办法,它用LoadPanelEx或LoadPanelEx函数代替LoadPanel或LoadPanel,因为当用外围平台的LoadLibrary函数得到动态链接库的句柄传给LoadPanelEx 或LoadPanelEx函数后,在调用动态链接库的界面时,共用户界面库会首先在动态链接库函数列表中查找.UIR文件中的匹配函数、变量,这样就会实现良好的链接调用,实现界面互连。

2.3 Labwindows/CVI的动态链接库和C++ Builder间的数据传递在Labwindows/CVI的动态链接库被C++ Builder调用的过程中, C++ Builder是程序主体,它的全局、局部变量对于Labwindows/CVI的被调用函数和C++ Builder来说都是可见的,都可以作为参数传递给动态链接库中C++ Builder可见的变量和函数,但Labwindows/CVI的变量中却只有全局变量定义输出后才可被C++ Builder调用,因为只有通过这种形式,变量象函数一样在.h文件中声明或作了输出标记,才可以被C++ Builder象输出函数一样识别,综上Labwindows/CVI和C++ Builder间传递数据有两种方法:(1)共享全局变量的方式,在C++ Builder和Labwindows/CVI声明的全局变量均可共享。

(2)参数传递方式,在C++ Builder中声明并通过函数的形式参数传递到Labwindows/CVI中。

Labwindows/CVI和C++ Builder结合的目的也是为了传递数据到C++ Builder,方便数据的管理和被其它模块调用,以实现数据共享,但是用全局变量传递数据存在问题,那就是若在C++ Builder和Labwindows/CVI中均由某个全局变量的定义,将会导致识别错误,为此本课题采用了函数形式参数传递数据的方法,把待赋值变量和待输出变量用某个函数连接起来,实现Labwindows/CVI的测试数据导入C++Builder中,如下所示:在Labwindows/CVI中A,B,C......代表采集数据的值,a、b、c......代表待赋值变量,作为某个函数的参数即int CVICallback Shuchu (a,b,c......),在这个函数中把Labwindows/CVI的测试数据A,B,C传递给a,b,c......因此只要利用参数传递数据方式,在调用此函数时把C++ Builder 的待赋值变量作为参数传递给此函数代替a,b,c就可以了,如此就实现了Labwindows/CVI的测试数据在两平台上的共享。

2.4 Labwindows/CVI的功能模块在C++Builder中的集成实例本例中C++ Builder调用Labwindows/CVI的面板显示和数据采集模块,以达到Labwindows/CVI的功能模块在C++ Builder中集成调用的目的。

(1)Labwindows/CVI的功能模块以动态链接库的形式被调用,代码如下:①Labwindows/CVI在.h文件中对输出函数进行声明int main1(HINSTANCE CVIUserHInst);②Labwindows/CVI在.c文件中对输出函数进行定义#include < convolv5.h>……int __stdcall DllMain (HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) //在DllMain和DllEntryPoint函数中定义了Labwindows/CVI动态连接库的运行机制,如前所述{switch (fdwReason){case DLL_PROCESS_A TTACH: //模块被外围程序调用时CVI自身的运行机制if (InitCVIRTE (hinstDLL, 0, 0) == 0)return 0; /* out of memory */break;case DLL_PROCESS_DETACH:CloseCVIRTE ();}return 1;}int __stdcall DllEntryPoint (HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved){return DllMain (hinstDLL, fdwReason, lpvReserved);}int main1 (HINSTANCE CVIUserHInst) //对Labwindows/CVI的调用面板函数main1进行定义并采集数据{mainpnl = LoadPanelEx (0, "convolve.uir", MAINPNL,CVIUserHInst);int be;……//控制仪器采集数据并赋予变量beDisplayPanel (mainpnl);RunUserInterface ();return 0;}(2) C++Builder的主调用模块,代码如下:①C++Builder在.h文件中对调用函数进行声明#include <Forms.hpp>……extern "C" _declspec(dllimport) _stdcall int main1(HINSTANCE CVIUserHInst);②C++Bilder在.cpp文件中对面板显示函数main1和采集数据进行调用#include “Unit1.h”……void __fastcall TForm1::Button1Click(TObject *Sender){HINSTANCE DLLinst=NULL; //定义动态连接库的调用句柄DLLinst并赋初值DLLinst=LoadLibrary("convolv5.dll"); //装载动态连接库convolv5.dllmain1(DLLinst); //调用convolv5.dll的面板显示函数main1()Form1->Table1->First(); //调用采集数据并数据库进行操作Form1->Table1->Edit();Form1->Table1->FieldValues["Youaregood"]=be;//Youaregood字段得到CVI数据输出变量be 的值Form1->Table1->Post();}至此完成了C++Builder对CVI功能模块的调用工作。

相关文档
最新文档