为什么我定制的CVI函数似乎无法改变它的参数的值

为什么我定制的CVI函数似乎无法改变它的参数的值,第1张

我定制的CVI函数似乎只能临时的改变它的参数的值。通过变量窗口(在debug模式下,对代码进行步调),我发现在函数内部,值发生改变了,但一旦退出函数,参数就还原为在函数调用之前的值。为什么会这样?

解答:

这实际上是C语言的问题而不是CVI本身。多数情况下是因为你通过值来传递你的参数而不是通过引用。当你用值来传递一个参数,一个数据的拷贝会被产生并传递给函数。一旦函数运行完毕,拷贝数据对应的内存区域将被释放或重新分配,在函数内部,对该参数任何你所认为的修改都将随之丢失。

如果你希望即使函数运行结束了,函数内部对参数所做的修改仍被保留,那你必须用引用来传递参数。这意味着你需要传递给函数的是待修改数据的地址而非数据的拷贝,这样你的函数将可以直接修改数据本身。

如下所示的代码给出了怎样通过值和引用来传递一个参数。代码的输出(如下面的附件所示)证明了一个通过引用来传递的参数是怎样与在函数中所修改的值保持一致的。相对的,通过值来传递的参数是不会改变的。

#include

<stdioh>

void

foo(int

bach);

//does

not

alter

the

variable--passing

parameter

by

value

void

foo2(int

bach);

//does

alter

the

variable--passing

parameter

by

reference

void

main()

{

int

js=0;

printf("\n(from

main)

before

calling

foo,

js=%d\n",js);

foo(js);

printf("\n(from

main)

after

calling

foo,

js=%d",js);

foo2(&js);

printf("\n(from

main)

after

calling

foo2,

js=%d",js);

getc(stdin);

}

void

foo(int

bach)

{

printf("\nI,

the

function

foo,

will

add

50

to

the

variable

js,\n

even

though

I

only

have

a

copy

of

the

variable");

bach=bach+50;

}

void

foo2(int

bach)

{

printf("\nI,

the

function

foo2,

will

modify

the

original

variable

instead

(using

pointer),\n

so

that

the

change

is

reflected

in

main,

even

after

the

function

has

ended");

bach=bach+99;

}

面板见图

程序如下:

#include <cvirteh>

#include <userinth>

#include "计算h"

static int panelHandle;

int i;

double x,y,val;

int main (int argc, char argv[])

{

if (InitCVIRTE (0, argv, 0) == 0)

return -1; / out of memory /

if ((panelHandle = LoadPanel (0, "计算uir", PANEL)) < 0)

return -1;

DisplayPanel (panelHandle);

RunUserInterface ();

DiscardPanel (panelHandle);

return 0;

}

int CVICALLBACK Quit (int panel, int control, int event,

void callbackData, int eventData1, int eventData2)

{

switch (event)

{

case EVENT_COMMIT:

QuitUserInterface (0);

break;

}

return 0;

}

int CVICALLBACK Jisuan (int panel, int control, int event,

void callbackData, int eventData1, int eventData2)

{

switch (event)

{

case EVENT_COMMIT:

GetCtrlVal(panelHandle,PANEL_NUMERIC,&x);

GetCtrlVal(panelHandle,PANEL_NUMERIC_1,&y);

GetCtrlVal(panelHandle,PANEL_RINGSLIDE,&i);

switch(i)

{

case 0:

val=x+y;

break;

case 1:

val=x-y;

break;

case 2:

val=xy;

break;

case 3:

if(y==0)

{

MessagePopup("Warning","被除数不能为“0”");

}

else

val=x/y;

break;

}

SetCtrlVal(panelHandle,PANEL_NUMERIC_2,val);

break;

}

return 0;

}

这个问题要分具体情况,

1,这个板子如果供应商提供DLL开发库,可以用CVI来调用DLL中的函数完成数据采集。

2,如果此USB采集卡支持VISA,可以安装NI的VISA模块,直接用CVI通过VISA来采集数据。

3,如果此USB接口提供虚拟RS232,就可以在CVI中用RS232函数进行采集。

看你是哪种情况。

先去把如鹏网C语言干大事视频的ODBC数据库 部分看了你就知道该咋弄了

附件是我参考它的视频写的mdb数据库读取 *** 作

(他是讲c+vc+mysql的,)mdb(access)方法类似的

上下位机机通信什么的你可以去看 cvi自带的rs232的例子

char buf[256];

int selectindex;

GetCtrlIndex(panelHandle, PANEL_RING, &selectindex);

GetLabelFromIndex (panelHandle, PANEL_RING, selectindex, (void )buf);

MessagePopup("选择项为", buf);

然后你就去strcpy strcat 拼个文件路径字符串出来 ,stdioh fopen 吧

大数据(big data),指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。大数据的5V特点(IBM提出):Volume(大量)、Velocity(高速)、Variety(多样)、Value(低价值密度)、Veracity(真实性),平台有hadoop

NI公司的LabWindows/CVI是一个久经验证的用于测试和测量的ANSI C开发环境,极大地提高了工程师和科学家们的生产效率。他们使用LabWindows/CVI来开发高性能的、可靠的应用程序,用于制造测试、军事/航天、通讯、设计验证和汽车工业等领域。开发人员可以在设计阶段利用LabWindows/CVI的硬件配置助手、综合调试工具以及交互式执行功能,来运行各项功能,使得这些领域的开发流水线化。使用内置的测量库,你可以迅速的开发出复杂的应用程序,例如多线程编程和ActiveX的服务器/客户端程序。由于LabWindows/CVI的便利性,你可以通过在相似环境中重复使用以前的代码来维护你的代码投资,并且实现Windows、Linux&reg;或实时平台上分布测试系统的无缝集成。

LabWindows/CVI 是为C 语言程序员提供的软件开发系统,在其交互式开发环境中编写的程序必须符合标准C 规范。使用LabWindows/CVI 可以完成如下工作: 交互式的程序开发具有功能强大的函数库,用来创建数据采集和仪器控制的应用程序; 充分利用完备的软件工具进行数据采集、分析和显示; 利用向导开发IVI 仪器驱动程序和创建ActiveX 服务器; 为其它程序开发C 目标模块、动态连接库(DLL)、C 语言库。

在LabWindows/CVI开发环境中可以利用其提供的库函数来实现程序设计、编辑、编译、链接和标准C 语言程序调试。在该开发环境中可以用LabWindows/CVI 丰富的函数库来编写程序,此外每个函数都有一个叫做函数面板(Function Panel)的交互式 *** 作界面,在函数面板中可以执行该函数并可以生成调用该函数的代码,也可通过右击面板或控件获得有关函数、参数、函数类和函数库的帮助。在LabWindnows/CVI 的交互式环境中编写程序必须符合标准C 语言的规范。另外,在开发应用程序时可以使用编译好的C 语言目标模块,动态链接库(DLL),C静态库和仪器驱动程序。LabWindows/CVI 的功能强大在于它提供了丰富的函数库。利用这些库函数除可实现常规的程序设计外,还可实现更加复杂的数据采集和仪器控制系统的开发。仪器库是LabWindows/CVI 的特殊资源。它包GPIB、VXI 和RS-232仪器的驱动程序,如示波器、多用表和函数发生器,每个驱动程序都提供可编辑的源代码。使用 LabWindows/CVI 开发工具提供的库函数可以创建自己的仪器驱动程序,可以创建单个仪器、多个仪器或实际上并不存在的虚拟仪器的驱动程序,在创建仪器驱动程序过程中可以使用LabWindows/CVI 的其它库函数。使用LabWindows/CVI 的用户界面编辑器可以创建并编辑图形用户界面(GUI),而使用LabWindows/CVI 的用户界面库函数可以在程序中创建并控制GUI。此外,LabWindows/CVI为GUI 面板的设计,准备了许多专业控件,如:曲线图控件、带状图控件、表头、旋钮和指示灯等,以适应测控系统软件开发的需求,利用这些控件可以设计出专业的测控程序界面。

以上就是关于为什么我定制的CVI函数似乎无法改变它的参数的值全部的内容,包括:为什么我定制的CVI函数似乎无法改变它的参数的值、关于LabWindows/CVI的 *** 作问题 怎么样可以输入一个数据,包括面板和.c 程序,、哪位大神告诉我labwindows如何控制USB设备等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9637982.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存