- 易迪拓培训,专注于微波、射频、天线设计工程师的培养
LABVIEW深入探索---reference(参考)和refnum(参考号)
录入:edatop.com 点击:
看到今天的评论,建议我写一点有关REFERENCE的文章,的确早就想写点这部分内容,但是不太容易,因为NI这方面的中文资料很少,我甚至无法准确地翻译REFERENCE。
REFERENCE的常规翻译是参考,目前国内有关LV的书籍也是这样翻译的,但是从我个人理解还是翻译成引用比较好。
为了准确理解引用的概念有必要先解释一下C语言中指针的概念。
int var;
int *pVar;
pVar=&var;
当我们声明了var整型变量后,在计算机的内存中就分配了四个字节的连续内存空间(与编译器有关,早期是两个字节),pVar是一个指向整型变量的指针,它本身就是32位整型数,自然也占四个字节的内存空间,不过这四个字节的内容是VAR的内存地址。
LV的参考是什么那?我个人理解就是对象的指针。我在一篇文章中提到,LV本身是基于数据流的,不过它的前面板控件却是典型的面向对象的类的继承关系。LV的对象就是指向各种类的指针(当然不仅仅是控件,菜单,文件等也是用参考进行参数传递的)。
C语言的指针有两种情况,一是未指向任何变量的指针( int *pVar,此时,只是定义了指针,未指向任何变量或者对象),二是指向了特定的变量或者对象(pVar=&var)
实际上,LV的参考也分成这两种情况,我们可以通过两种方式来创建控件的参考。
我们以CONTROL REFERENCE为例,当我们在前面板生成这个控件的时候,该控件未指向任何特定的控件,甚至未指向任何特定的数据类型,比如BOOLEAN ,NUMERIC等等。
从C语言的角度,更像定义了一个void *pVar;(当然,它已经指定的范围,是控件的参考)
我们可以认为它指向的是控件的基本类,但是是未初始化的,未指向特定对象。
LABVIEW的每一个REFERENCE都有一个编号,称为REFERENCE NUMBER,简写RefNum,RefNum是对象(可能是控件,面板,文件,菜单等)的唯一标识符号,这个标识符号如果理解成指针应该是个I32表示的内存地址。
对于C语言,未初始化的的指针一般让它指向0,看LV是否如此那?
对于前面两个,控件参考和菜单参考,因为未指向任何特定对象,所以他们的REFNUM的值是0,而下面的NUMERIC REFNUM,因为控件本身已经存在了,因此它的值是存在的,这和C语言是类似的。
一个未指向任何对象的指针称作空指针,那么未指向任何对象的参考也可以称作空参考。
可以看出,未指向任何对象的参考号REFNUM的值是0,LV判断它是一个空的或者非法的REFNUM.
对于两个指向同一特定控件的REFERENCE,它们的REFNUM是相同的。
由此可以得出结论,在加载前面板后,控件对象已经实际存在,指向同一控件的参考,他们的参考号是相同的。得到控件的参考号就可以控制控件的所有属性,如是否可见,闪烁等。 [p]
REFERENCE的常规翻译是参考,目前国内有关LV的书籍也是这样翻译的,但是从我个人理解还是翻译成引用比较好。
为了准确理解引用的概念有必要先解释一下C语言中指针的概念。
int var;
int *pVar;
pVar=&var;
当我们声明了var整型变量后,在计算机的内存中就分配了四个字节的连续内存空间(与编译器有关,早期是两个字节),pVar是一个指向整型变量的指针,它本身就是32位整型数,自然也占四个字节的内存空间,不过这四个字节的内容是VAR的内存地址。
LV的参考是什么那?我个人理解就是对象的指针。我在一篇文章中提到,LV本身是基于数据流的,不过它的前面板控件却是典型的面向对象的类的继承关系。LV的对象就是指向各种类的指针(当然不仅仅是控件,菜单,文件等也是用参考进行参数传递的)。
C语言的指针有两种情况,一是未指向任何变量的指针( int *pVar,此时,只是定义了指针,未指向任何变量或者对象),二是指向了特定的变量或者对象(pVar=&var)
实际上,LV的参考也分成这两种情况,我们可以通过两种方式来创建控件的参考。
我们以CONTROL REFERENCE为例,当我们在前面板生成这个控件的时候,该控件未指向任何特定的控件,甚至未指向任何特定的数据类型,比如BOOLEAN ,NUMERIC等等。
从C语言的角度,更像定义了一个void *pVar;(当然,它已经指定的范围,是控件的参考)
我们可以认为它指向的是控件的基本类,但是是未初始化的,未指向特定对象。
LABVIEW的每一个REFERENCE都有一个编号,称为REFERENCE NUMBER,简写RefNum,RefNum是对象(可能是控件,面板,文件,菜单等)的唯一标识符号,这个标识符号如果理解成指针应该是个I32表示的内存地址。
对于C语言,未初始化的的指针一般让它指向0,看LV是否如此那?
对于前面两个,控件参考和菜单参考,因为未指向任何特定对象,所以他们的REFNUM的值是0,而下面的NUMERIC REFNUM,因为控件本身已经存在了,因此它的值是存在的,这和C语言是类似的。
一个未指向任何对象的指针称作空指针,那么未指向任何对象的参考也可以称作空参考。
可以看出,未指向任何对象的参考号REFNUM的值是0,LV判断它是一个空的或者非法的REFNUM.
对于两个指向同一特定控件的REFERENCE,它们的REFNUM是相同的。
由此可以得出结论,在加载前面板后,控件对象已经实际存在,指向同一控件的参考,他们的参考号是相同的。得到控件的参考号就可以控制控件的所有属性,如是否可见,闪烁等。 [p]