LABVIEW深入探索---reference(參考)和refnum(參考號(hào))
REFERENCE的常規(guī)翻譯是參考,目前國(guó)內(nèi)有關(guān)LV的書籍也是這樣翻譯的,但是從我個(gè)人理解還是翻譯成引用比較好。
為了準(zhǔn)確理解引用的概念有必要先解釋一下C語(yǔ)言中指針的概念。
int var;
int *pVar;
pVar=&var;
當(dāng)我們聲明了var整型變量后,在計(jì)算機(jī)的內(nèi)存中就分配了四個(gè)字節(jié)的連續(xù)內(nèi)存空間(與編譯器有關(guān),早期是兩個(gè)字節(jié)),pVar是一個(gè)指向整型變量的指針,它本身就是32位整型數(shù),自然也占四個(gè)字節(jié)的內(nèi)存空間,不過(guò)這四個(gè)字節(jié)的內(nèi)容是VAR的內(nèi)存地址。
LV的參考是什么那?我個(gè)人理解就是對(duì)象的指針。我在一篇文章中提到,LV本身是基于數(shù)據(jù)流的,不過(guò)它的前面板控件卻是典型的面向?qū)ο蟮念惖睦^承關(guān)系。LV的對(duì)象就是指向各種類的指針(當(dāng)然不僅僅是控件,菜單,文件等也是用參考進(jìn)行參數(shù)傳遞的)。
C語(yǔ)言的指針有兩種情況,一是未指向任何變量的指針( int *pVar,此時(shí),只是定義了指針,未指向任何變量或者對(duì)象),二是指向了特定的變量或者對(duì)象(pVar=&var)
實(shí)際上,LV的參考也分成這兩種情況,我們可以通過(guò)兩種方式來(lái)創(chuàng)建控件的參考。
我們以CONTROL REFERENCE為例,當(dāng)我們?cè)谇懊姘迳蛇@個(gè)控件的時(shí)候,該控件未指向任何特定的控件,甚至未指向任何特定的數(shù)據(jù)類型,比如BOOLEAN ,NUMERIC等等。
從C語(yǔ)言的角度,更像定義了一個(gè)void *pVar;(當(dāng)然,它已經(jīng)指定的范圍,是控件的參考)
我們可以認(rèn)為它指向的是控件的基本類,但是是未初始化的,未指向特定對(duì)象。
LABVIEW的每一個(gè)REFERENCE都有一個(gè)編號(hào),稱為REFERENCE NUMBER,簡(jiǎn)寫RefNum,RefNum是對(duì)象(可能是控件,面板,文件,菜單等)的唯一標(biāo)識(shí)符號(hào),這個(gè)標(biāo)識(shí)符號(hào)如果理解成指針應(yīng)該是個(gè)I32表示的內(nèi)存地址。
對(duì)于C語(yǔ)言,未初始化的的指針一般讓它指向0,看LV是否如此那?
對(duì)于前面兩個(gè),控件參考和菜單參考,因?yàn)槲粗赶蛉魏翁囟▽?duì)象,所以他們的REFNUM的值是0,而下面的NUMERIC REFNUM,因?yàn)榭丶旧硪呀?jīng)存在了,因此它的值是存在的,這和C語(yǔ)言是類似的。
一個(gè)未指向任何對(duì)象的指針?lè)Q作空指針,那么未指向任何對(duì)象的參考也可以稱作空參考。
可以看出,未指向任何對(duì)象的參考號(hào)REFNUM的值是0,LV判斷它是一個(gè)空的或者非法的REFNUM.
對(duì)于兩個(gè)指向同一特定控件的REFERENCE,它們的REFNUM是相同的。
由此可以得出結(jié)論,在加載前面板后,控件對(duì)象已經(jīng)實(shí)際存在,指向同一控件的參考,他們的參考號(hào)是相同的。得到控件的參考號(hào)就可以控制控件的所有屬性,如是否可見,閃爍等。
評(píng)論