LABVIEW深入探索---reference(參考)和refnum(參考號)
REFERENCE的常規翻譯是參考,目前國內有關(guān)LV的書(shū)籍也是這樣翻譯的,但是從我個(gè)人理解還是翻譯成引用比較好。
為了準確理解引用的概念有必要先解釋一下C語(yǔ)言中指針的概念。
int var;
int *pVar;
pVar=&var;
當我們聲明了var整型變量后,在計算機的內存中就分配了四個(gè)字節的連續內存空間(與編譯器有關(guān),早期是兩個(gè)字節),pVar是一個(gè)指向整型變量的指針,它本身就是32位整型數,自然也占四個(gè)字節的內存空間,不過(guò)這四個(gè)字節的內容是VAR的內存地址。
LV的參考是什么那?我個(gè)人理解就是對象的指針。我在一篇文章中提到,LV本身是基于數據流的,不過(guò)它的前面板控件卻是典型的面向對象的類(lèi)的繼承關(guān)系。LV的對象就是指向各種類(lèi)的指針(當然不僅僅是控件,菜單,文件等也是用參考進(jìn)行參數傳遞的)。
C語(yǔ)言的指針有兩種情況,一是未指向任何變量的指針( int *pVar,此時(shí),只是定義了指針,未指向任何變量或者對象),二是指向了特定的變量或者對象(pVar=&var)
實(shí)際上,LV的參考也分成這兩種情況,我們可以通過(guò)兩種方式來(lái)創(chuàng )建控件的參考。

我們以CONTROL REFERENCE為例,當我們在前面板生成這個(gè)控件的時(shí)候,該控件未指向任何特定的控件,甚至未指向任何特定的數據類(lèi)型,比如BOOLEAN ,NUMERIC等等。
從C語(yǔ)言的角度,更像定義了一個(gè)void *pVar;(當然,它已經(jīng)指定的范圍,是控件的參考)
我們可以認為它指向的是控件的基本類(lèi),但是是未初始化的,未指向特定對象。
LABVIEW的每一個(gè)REFERENCE都有一個(gè)編號,稱(chēng)為REFERENCE NUMBER,簡(jiǎn)寫(xiě)RefNum,RefNum是對象(可能是控件,面板,文件,菜單等)的唯一標識符號,這個(gè)標識符號如果理解成指針應該是個(gè)I32表示的內存地址。
對于C語(yǔ)言,未初始化的的指針一般讓它指向0,看LV是否如此那?

對于前面兩個(gè),控件參考和菜單參考,因為未指向任何特定對象,所以他們的REFNUM的值是0,而下面的NUMERIC REFNUM,因為控件本身已經(jīng)存在了,因此它的值是存在的,這和C語(yǔ)言是類(lèi)似的。
一個(gè)未指向任何對象的指針?lè )Q作空指針,那么未指向任何對象的參考也可以稱(chēng)作空參考。

可以看出,未指向任何對象的參考號REFNUM的值是0,LV判斷它是一個(gè)空的或者非法的REFNUM.
對于兩個(gè)指向同一特定控件的REFERENCE,它們的REFNUM是相同的。

由此可以得出結論,在加載前面板后,控件對象已經(jīng)實(shí)際存在,指向同一控件的參考,他們的參考號是相同的。得到控件的參考號就可以控制控件的所有屬性,如是否可見(jiàn),閃爍等。
評論