執行檔找不到指定路徑的DLL

更新 May 28, 2021

產品資訊

軟體

  • LabVIEW Base
  • LabVIEW Full
  • LabVIEW Professional

問題敘述

  • 我有一個VI通過Call Library Function Node可以調用DLL。在開發環境中,DLL可以正確地被調用,並且該應用程式也能正常運行。創建執行檔時,系統會提示要求指定DLL路徑。如何防止出現該提示?
  • 我的LabVIEW專案中有一個檔案包含了儀器的DLL檔案。創建執行檔時,出現以下警告:
LabVIEW prevented a file name collision during the build. Duplicate file names cannot be copied to the same destination. You can rename files as part of the build process to avoid name conflicts.
繼續創建應用程式後,我到Support Files尋找該DLL檔案,但並不存在。我該如何解決此問題?

解決方案

執行檔僅在某些目錄中查找DLL。 Windows將搜索以下位置以查找您的DLL:
  1. 運行執行檔的當前目錄
  2. Windows系統目錄 (<Windows>\System32)
  3. PATH環境變數中指定的任何路徑
預設情況下,LabVIEW會將使用Call Library Function Node調用的大多數DLL複製到執行檔的data目錄中。

如果儀器的DLL檔案位於檔案夾內:
  1. 轉到Application Properties >> Destinations
  2. 創建一個與LabVIEW專案中的檔案夾同名的檔案夾
  3. 轉到Source File Settings
  4. 選擇包含DLL的檔案夾,然後在Destination選擇Support Directory
有關如何在.exe檔案中包括檔案的更多資料,請瀏覽Including Supporting Files in the Same Directory as the .exe File When Building an Executable

相關資訊

如果您在應用程式中使用user32.dll或另一個WinAPI DLL,並且未正確指定硬碟庫的位置,則在嘗試運行執行檔時可能會收到以下錯誤: Entry Point Not Found: The procedure entry point wcscat_s could not be located in the dynamic link library ntdll.dll 。當在創建調用共享庫的執行檔時,LabVIEW會在創建的data支援目錄中包含DLL的本地複製。當運行執行檔時,LabVIEW Run-Time Engine會先在該目錄中搜尋共享庫。如此操作下,Run-Time Engine將在布署的電腦上調用錯誤版本的WinAPI DLL,這可能會導致各種問題。

如果要調用系統目錄中的WinAPI DLL,則有三個選項:
  • 在Call Library Function Node中只輸入DLL檔案名,但不包含其路徑。這將避免在創建應用程式時在data目錄中創建DLL的本地複製。
  • data目錄中刪除WinAPI DLL。如此在每次啟動執行檔時,執行檔都會搜索DLL。通過將<Windows>\System32檔案夾添加到執行檔的VI搜索路徑(Tools»Options»Paths»VI Search Path)來解決此問題。
  • 從Call Library Function Node的對話方塊中選擇Specify path on diagram,然後將共享庫的路徑硬撰寫輸入程式區的path in