以傳遞整型參數為例:在參數配置面板,我們可以選擇值傳遞(Pass Value)或選擇指標傳遞(Pass Pointer to Value)。
當選擇了值傳遞時,庫函數調用節點是不會改變該參數的內容的。如果我們在該庫函數調用節點參數的左側接線端引入輸入資料,在輸出端引出輸出參數,那麼輸出資料其實是直接由輸入資料引出的,LabVIEW不會在這個節點處開闢緩衝。
在指標傳遞方式時,LabVIEW則認為傳入的資料會被改變。如果輸入資料同時還要發往其它節點,LabVIEW會在此處開闢緩衝,為輸入資料作一個副本。選用指標傳遞方式,庫函數調用節點的每一對接線端也同樣是緩衝重用的。就是說,庫函數調用節點的輸出值是直接存放在輸入值的緩衝空間的。
如果一個參數只用作輸出,我們通常會在庫函數調用節點的輸入接線端為它建立一個輸入常數,這個常數的地址空間並不能直接被利用,它只是為庫函數調用節點開闢的緩衝而設定的初始值。不接輸入常數,LabVIEW也會為此參數開闢一塊緩衝。但是,這樣每次傳入的參數值都會有變化。例5,庫函數調用節點調用的函數功能是為把輸入的值加1,然後輸出。圖5-a中的輸出值永遠都是1,而圖5-b,每次運行輸出結果都會比前次增加1。這是因為庫函數調用節點每個指標傳遞的參數的輸入輸出用的是同一塊緩衝,即每次運行輸入值是上回的輸出值。
圖5: 庫函數調用節點
我們可以利用圖5-c的例子證明LabVIEW某些節點是緩衝重用的。每次運行5-c的例子,輸出結果都會比前次增加2。這是因為樣本中的參數接線端以及“+1”節點的輸入輸出端所使用的都是同一緩衝。 如果,庫函數調用節點中某個參數只有輸入鏈進去,沒有輸出。那麼,LabVIEW 是假設你調用的函數不會修改這個參數的。LabVIEW 不會為這個資料做拷貝,它會重用這個資料的緩衝。但如果你調用的函數修改的這個資料,你的程式就會面臨這樣一個潛在的危險:這個資料可能被程式其它部分的代碼使用了,在那裡,你看不出這個資料有任何被改動的地方,但它在運行時卻不是你期望的數值。因為這個資料所在的緩衝,被程式其它一個地方的一個庫函數調用節點給重用了,而這個節點又偷偷摸摸的修改了它。
在圖5中的樣本中,如果庫函數調用節點輸出的參數是個數組或者字串,那麼就必須為它相對應的輸入端聯入一個與輸出資料大小一致的數組或字串。否則,LabVIEW無法知道輸出資料的大小,而使用預設分配的緩衝空間很容易出現數組越界錯誤。