2013-07-26 150 views
2

我在LabVIEW中加載DLL時遇到了問題。
我使用LabVIEW連接流量計,爲此目的,製造流量計的公司已經足夠給我一個子VI庫了。這些子VI中的每一個都從該公司提供的兩個DLL庫中的一個調用函數。Labview 2011中的DLL加載錯誤

因此這些子VI的一半都依賴於一個DLL,而另一半則是依賴於其他DLL。 那些使用第一個DLL工作得很好,並且沒有問題。 但那些使用第二DLL有一些類型的錯誤:我每次打開這些子VI的一個時間,我得到的說,一個彈出窗口:

錯誤加載「絕對路徑\ name.dll」。 DLL庫初始化例程失敗。

然後子VI不可執行,運行按鈕顯示爲破解。但有一個轉折點。如果我在「配置庫函數節點」並選擇配置單擊右鍵,然後重新選擇完全相同的 DLL的絕對路徑在相應的字段,然後單擊確定,子VI運轉很好,準確地完成它應該做的。我實際上並沒有改變節點配置窗口中的任何內容,我只是重新選擇了相同的路徑。更奇怪的是,這個奇怪的「竅門」只有75%的時間才起作用。另外25%的時間,我需要真正關閉VI和其他引用它的VI,然後重新打開它。

然後還有另一種扭曲,使得更少的意義對我說:該公司也給我發了幾個「VI範例」,顯示如何不同的子VI應在相關地使用對方。這些例子運行得非常好!但後來我寫了自己的VI,它是「示例VI」的一個更簡單的版本,並且我不斷收到DLL加載錯誤。

我在做什麼錯了,我該如何確保在VI,而無需每次都重新配置庫功能節點可執行文件?你認爲是什麼導致了這個問題?

N.B:這個問題的部分原因是,我真的不知道如何在LabVIEW中讀取一個DLL工程,等等,任何的信息也將不勝感激。

+2

LabVIEW DLL處理非常簡單,它加載DLL和列表函數。由於不滿意的依賴或DLL初始化失敗,DLL加載(在VI打開時)往往會失敗。你有沒有訪問DLL的源代碼?它是否在[Dependency Walker](http://www.dependencywalker.com/)中正確打開? – CharlesB

+1

不幸的是,我沒有訪問DLL源代碼,但我已經下載了依賴關係的步行者。該DLL似乎打開得很好,雖然我真的不知道依賴關係wlaker會說,如果沒有。有趣的是,我將自己的VI移動到與示例VI相同的目錄中,並且我注意到了這一點:如果我打開示例VI然後是我自己的VI,則不會引發DLL Load錯誤,並且子VI都可以在例子VI和我自己的。但是,如果我打開自己的VI,然後打開示例VI,都會拋出錯誤。這是否意味着什麼? – Art

+1

您是否在重置路徑後保存VI? LabVIEW存儲相對路徑或絕對路徑,可能會混淆。 當你打開VI(壞掉)並且不修復它時,你可以在LabVIEW項目依賴列表中查看路徑。 還要確保在項目的'路徑'部分(在項目窗口中按Ctrl-e)該DLL列在正確的位置。可能是因爲某些依賴項試圖在VI嘗試加載它們之前從另一個位置加載DLL。 –

回答

0

當你在LabVIEW中調用一個函數(DLL中).dll文件必須是這裏的位置是在連接位置容易獲得(或我相信,在相同的位置VI /可執行文件) 。

例如,如果我寫一個子VI說調用標準輸出寫入命令提示符,它會調用一個Windows DLL。這個DLL應該在windows計算機以後的每一個地方都是一樣的,因爲很多Windows程序都需要它在日常使用中使用,所以它總會被定位。

c:\windows\system32\stdout.dll //note this is and example 

現在,當你用你的新流量計VI年代,人們期待的動態鏈接庫將位於何地,他們的原單作者(或至少最後編輯)機。如果他們不在那裏,LabView會嚇壞了。

您可以重新鏈接和翻拍VI的艱辛的道路。對不起,但它可能是重製它們的最簡單方法。