如要在 LabVIEW 底下呼叫 DLL,您必須先了解它的型態是什麼。 基本上 DLL 會有兩種型態;C/C++ DLL 和 Microsoft .NET Assembly。 製造 C/C++ 型態的 DLL 可用 C, C++ 或其他語言 (.NET 語言除外) 像是 Java, Fortran 或 Visual Basic 6.0。 .NET 的 DLL 可被稱為 .NET Assembly 或 Assembly。.NET 的 DLL 與其它的 DLL 不太一樣。 .NET DLL 使用的是 Common Language Runtime (CLR) 和 .NET Framework 來管理 DLL 內的功能。
如果使用的是 C/C++ 的 DLL
- 找到它的標頭檔 (*.h) 或它的函數原型定義。
- 決定您想要使用的函數。請注意這些函數的參數是否是最基本的型態像是 int, char, double 或者是比較複雜的型態像是 struct, array 或 vector。
- 如果您的函數沒有任何複雜的參數而且您也有它的標頭檔(*.h), 那您就可以使用 Import Shared Library Wizard 來建立包含標頭檔中的函數的 LabVIEW library。此工具可在 Tool»Import»Shared Library (.dll)... 開啟。
- 如果您沒有 DLL 的標頭檔,您就必須研究此DLL的文件來了解函數裡參數的定義。接著,您就可以使用 Call Library Function Node 功能來呼叫您的函數。下圖顯示出 Call Library Function Node 在 palette 中的位置
- 雙擊 Call Library Function Node 來設定節點。在設定對話視窗的 Function 分頁,輸入 DLL 的路徑並選擇要呼叫的函式。
- 如果您要呼叫的函數包含複雜數據類型,則您必須在 Call Library Function Node 的設定視窗中手動定義函數原型 (如果 DLL 已使用型別程式庫 (Type Library) 編譯,參數和回傳類型將會被自動定義)。切換到設定視窗中的 Parameters 頁面。您可以在此添加參數以及修改回傳類型,直到視窗底部的函數原型與 DLL 的函數定義匹配。
如果使用的是 .NET assembly 的 DLL
- 要在 LabVIEW 中使用 .NET assembly,只需使用 .NET palette (Connectivity».NET) 即可找到所有可用的功能。
- 首先使用 Constructor Node 來實例一個 .NET assembly 類別。這可以通過雙擊 Constructor Node 以顯示 Select .NET Constructor 對話框來完成。
- 接著使用屬性與方法節點 (Property / Invoke Node) 來控制或呼叫此類別下的屬性與動作。您只需要把 Constructor node 的參考點連接到屬性或方法節點 (Property / Invoke Node) 即可。
Additional Information
如果您的複雜函數型態是具有多個基本數據類型 (int, double, char) 的結構,最簡單的方式就是製造一個基於 C 語言的 wrapper DLL。 由於 C / C++ 參數不一定跟 LabVIEW 的參數對的上,wrapper DLL 可以把複雜的參數轉換成比較基本的參數。例如,您有一個 C 寫的 struct 裡面包著一個 char * (文字或文字陣列) 的參數, 那您可以製造一個包裝檔來讓 LabVIEW 直接吃進 char * 並把它放進一個 struct 裡,最後再來呼叫原本的 DLL。所以在 LabVIEW 中您可以改為呼叫 wrapper DLL。如果您有此 DLL 的原始程式碼, 您也可以直接把 struct 型態改成 char* 的型態.
LabVIEW example finder 有如何在 LabVIEW 中正確呼叫外部程式碼的完整功能範例。請參閱
Help»
Find Examples»
Communicating with External Applications