問題描述:LabVIEW中有一種特殊的數據類型叫做變體。LabVIEW官方將變體成為可以容納所有數據類型的一個容器,可以傳入幾乎所有的數據類型,比如可以將某個數值轉換為變體,然后再通過相應的變體至數值轉換即可得到原來的值了。變體有許多很好的用處,但是編程也容易出現問題的,下面就一點點實踐上的問題做下記錄。 什么是變體:變體其實存儲了兩部分內容,第一部分是數據類型的描述,第二部分就是數值本身的存儲了,因此在將數據類型的值轉為變體時,不僅存儲了該值,還有相應類型的描述。在從變體轉為數據類型時,需要知道原來的數據類型,然后與之匹配轉換出原值。這個功能看似將數據轉來轉去,多此一舉,而且數據類型弄錯就會導致錯誤的數據,但是變體是非常有用的,就像C語言中的萬能指針一樣,當不確定需要傳入的數據為何種類型時,其使用價值就體現出來了。可能LabVIEW更多的像C語言一些,雖然現在也有面向對象部分的功能,但數據流的形式更加接近于過程控制。
變體用在何處:上面的在傳入數據類型不確定時使用變體很有用是一點,另外一點就是對ActiveX控件數據的傳輸,比如MSCOMM控件,還有數據庫相關的DCT工具中數據的存取等,都用到的是變體。
變體使用的最大問題:最大的問題應該就是數據類型的確定了,這也是變體的本身的屬性決定的。許多時候比如在使用ActiveX控件的時候,并不知道變體是如何將數據轉換成更加底層的數據的,也就是只要使用到變體至數值或者是數值至變體中的一個,變體是從ActiveX中傳來的,這時就必須詳細的了解該ActiveX變體所支持的數據類型了,否則編程中會出現非常奇怪的數據錯誤問題。比如該ActiveX控件的變體只支持字符串和一維字節數組的傳入,但由于沒有了解到這一點,在編程時給ActiveX控件變體傳入了float型數值,程序上并沒有錯誤,但是ActiveX控件得到的數據并非需要的,經過轉換后得到的是錯誤的數值,結果就出現莫名其妙的問題了。
變體的特點:因此變體使用靈活,但是在沒有完全了解其數據類型轉換的情況下使用也是容易出問題的。
評論