驗證DLL是否能在NI PharLap ETS LabVIEW Real-Time作業系統中執行

更新 Apr 18, 2024

產品資訊

軟體

  • LabVIEW Real-Time Module

操作系統

  • PharLap

問題敘述

我有一個DLL想在使用NI PharLap ETS作業系統的LabVIEW Real-Time控制器上上運行。該如何驗證我的DLL是否可在該作業系統上執行?
有沒有可以測試的工具?

解決方案

NI建議您將C-based的shared libraries放在CVI Real-Time上執行,以確保函式能被正確編譯且允許遠端除錯(remote debugging)。

如果是C++的shared library,NI強烈建議使用MSVC 2009或MSVC 2010編譯器。 其他的編譯器LabVIEW Real-Time ( NI PharLap ETS )可能不支援,或者編譯時,可能會需要將run-time元件靜態連結起來,進而產生容量更大的DLL。

注意:NI強烈建議使用VeriStand的用戶不要靜態連接MSVC的runtimes。

如果您的DLL可以在Windows電腦上運行,那它有很大機會可以在LabVIEW Real-Time ( NI PharLap ETS )中運行。但是,如果程式呼叫的函式不包含在Real-Time作業系統的Win32子集中,則程式將會運行失敗。例如,您可能會收到如下圖所示的錯誤訊息:

請使用附件的工具(DLL Checker)來確認您呼叫的DLL函式是否能被Real-Time作業系統支持。請使用與您LabVIEW Real-Time版本相同的DLL Checker。

注意:LabVIEW Real-Time 2015和2016可使用相同版本的DLL Checker。

其中函式可被分為三類:Good,Stubbed和Bad(如下所示)。
  • Good 表示該函式可以被Real-Time作業系統支持。
  • Stubbed 表示呼叫該函式不會導致佈署(Deploy)錯誤,但該函式內的動作已被刪除,該函式的輸出將會回傳預設值。因此使用到stubbed函式輸出值的所有程式將不會得到預期的執行結果。
  • Bad 表示該函式並未被匯出至作業系統。呼叫未被匯出函式的程式,將無法佈署(Deploy)。
LabWindows / CVI可以被用來建立專門在LabVIEW Real-Time環境上運行的DLL,只要在Build»Target Settings中選擇LabVIEW Real-Time Only for Run-Time Support。雖然CVI會檢查任何非法或不支援的函式呼叫,但它不會進行詳細的測試。您同樣可以使用附檔的工具(DLL Checker)進一步檢驗DLL在LabVIEW Real-Time中是否能正常運行。

有關如何建立適用於LabVIEW Real-Time環境的DLL的更多信息,請參閱下方連結。

注意:若此附加工具要求要附帶一些相依的DLL時(例如: wsock32.dll),請務必使用Real-Time Target上或路徑<National Instruments>/RT Images中的版本。即便它們的名稱相同,Real-Time Target上或<National Instruments>/RT Images路徑中的DLL版本有時候會與Windows中的DLL不同。


DLL Checker自動化

對於2013及更高版本,DLL Checker執行檔在調用時可以加入附加參數,這些參數可以指定要檢查的DLL,以及選擇要將檢查結果檔案存放的路徑。這讓使用者可以使用批次腳本(batch script)或可呼叫命令字元的程式(例如LabVIEW)來自動執行檢查流程。

參數傳遞的方式如:

-- -d "<path to dll>" -l "<path to log file>" -include "<path to DLL includes>"

以下是LabVIEW中檢查自動化的範例。
 
-d "<path to dll>" - 此標誌(flag)指定要檢查的DLL的路徑。

-l "<path to log file>" - 此標誌(flag)指定儲存檢查結果的路徑。如果在該指定的路徑中尚無文件存在,則將使用指定的名稱創建新文件。

-include "<path to DLL includes>" - 默認情況下,DLL Checker僅檢查您使用-d標誌指定的主DLL。為了檢查相依的.dll,需使用-include標誌。DLL Checker會被此標誌指引去檢查路徑資料夾內的所有.dll檔。