labview調(diào)用外部程序dll文件的cln

labview調(diào)用外部程序dll文件的cln

ID:33524396

大?。?18.50 KB

頁數(shù):22頁

時間:2019-02-26

labview調(diào)用外部程序dll文件的cln_第1頁
labview調(diào)用外部程序dll文件的cln_第2頁
labview調(diào)用外部程序dll文件的cln_第3頁
labview調(diào)用外部程序dll文件的cln_第4頁
labview調(diào)用外部程序dll文件的cln_第5頁
資源描述:

《labview調(diào)用外部程序dll文件的cln》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫

1、NILabVIEW調(diào)用外部程序DLL文件的CLN產(chǎn)品簡介:LabVIEW中是通過CallLibraryFunctionNode(CLN)節(jié)點來完成DLL文件調(diào)用的。創(chuàng)建一個新的VI,右擊程序框圖,在FunctionsPalette中依次選中Connectivity——Libraries&Executables工具欄即可找到該節(jié)點。詳細介紹:     LabVIEW調(diào)用DLL文件  LabVIEW支持通過調(diào)用DLL文件的方式與其它編程語言混合使用。比如,在實際的工程項目中,用戶可以用C++語言實現(xiàn)軟件的運算部分,并把這些功

2、能構(gòu)建在DLL文件中,然后再使用LabVIEW編寫程序的界面部分,并通過調(diào)用編寫好的DLL來調(diào)用運算部分的功能。  LabVIEW中是通過CallLibraryFunctionNode(CLN)節(jié)點來完成DLL文件調(diào)用的。創(chuàng)建一個新的VI,右擊程序框圖,在FunctionsPalette中依次選中Connectivity——Libraries&Executables工具欄即可找到該節(jié)點(圖1)?!                D1CallLibraryFunctionNode  將節(jié)點放置在程序框圖中,雙擊會出現(xiàn)它的配

3、置對話框,共有四頁。第一頁用于填寫被調(diào)用函數(shù)的信息(圖2)。Librarynameorpath需給出DLL文件名和路徑,操作系統(tǒng)路徑下的DLL文件,直接輸入文件名也可調(diào)用,否則必須輸入全路徑。在這里已經(jīng)給出名字的DLL是被靜態(tài)加載到程序中的,也就是說當調(diào)用了這個DLL的VI被裝入內(nèi)存時,DLL同時被裝入內(nèi)存。LabVIEW也可動態(tài)加載DLL,只要勾選上Specifypathondiagram的選項即可。選擇了這個選項,在Librarynameorpath中輸入的內(nèi)容就無效了,取而代之的是CLN節(jié)點多出一對輸入輸出,用于指

4、明所需要使用的DLL的路徑。這樣,當VI被打開時,DLL不會被裝入內(nèi)存,只用程序運行到需要使用這個DLL中的函數(shù)時,才把其裝入內(nèi)存。Functionname是需要調(diào)用的函數(shù)的名稱,LabVIEW會把DLL中所有的暴露出來的函數(shù)都列出,用戶只要在下拉框中選取即可。Thread欄用于設(shè)定哪個線程里運行被調(diào)用的函數(shù)。用戶可以通過CLN節(jié)點的配置面板來指定被調(diào)用函數(shù)運行所在的線程。CLN的線程選項非常簡單,只有兩項:RuninUIthread和Runinanythread。LabVIEW的程序框圖上直接可以看出一個CLN節(jié)點是選

5、用                  圖2填寫被調(diào)用函數(shù)信息的什么線程。如果RuninUIthread,節(jié)點顏色是橙色的;Runinanythread則是淺黃色的(圖3)?!                D3CLN不同線程對比  通常情況下,除非使用的動態(tài)鏈接庫是多線程安全的,CLN中選擇Runinanythread方式;否則必須選擇RuninUIthread方式。判斷一個動態(tài)鏈接庫是不是多線程安全的,需通過以下方法:如果一個動態(tài)鏈接庫的文檔中沒有明確說明它是多線程安全的,那么就要當作是非多線程安全的;在可以看到動態(tài)鏈

6、接庫源代碼的條件下,如果代碼中存在全局變量、靜態(tài)變量或者代碼中看不到有l(wèi)ock一類的操作,那么這個動態(tài)鏈接庫也就肯定不是多線程安全的。  選擇了Runinanythread方式,LabVIEW會在最方便的線程內(nèi)運行動態(tài)鏈接庫函數(shù),且一般會與調(diào)用它的VI在同一個線程內(nèi)運行。因為LabVIEW是自動多線程的語言,它也很可能會把動態(tài)鏈接庫函數(shù)分配給一個單獨的線程運行。如果程序中存在沒有直接或間接先后關(guān)系的兩個CLN節(jié)點,LabVIEW很可能會同時在不同的線程內(nèi)運行它們所調(diào)用的函數(shù),也許是同一函數(shù)。對于非多線程安全的動態(tài)鏈接庫,

7、這是很危險的操作。很容易引起數(shù)據(jù)混亂,甚至是程序崩潰。  選擇RuninUIthread方式,因為LabVIEW只有一個界面線程,所以如果所有的CLN設(shè)置都是界面線程,那么就可以保證這些CLN調(diào)用的函數(shù)肯定全部都運行在同一線程下,肯定不會被同時調(diào)用。對于非多線程安全的動態(tài)鏈接庫,這種方式就保證了它的安全?! ∽屛覀兓氐脚渲脤υ捒虻谝豁?,Callingconvention用于指明被調(diào)用函數(shù)的調(diào)用約定。這里只支持兩種約定:stdcall和Ccall。它們之間的區(qū)別在于,stdcall由被調(diào)用者負責清理堆棧,Ccall由調(diào)用者

8、清理堆棧。這個設(shè)置錯誤時,可能會引起LabVIEW崩潰,也就是說如果LabVIEW調(diào)用DLL函數(shù)時出現(xiàn)異常,首先應該考慮這個設(shè)置是否正確。(WindowsAPI一般使用的都是stdcall;標準C的庫函數(shù)大多使用Ccall。如果函數(shù)聲明中有類似__stdcall這樣的關(guān)鍵字,它就是stdcall的。)第二頁是函數(shù)參數(shù)

當前文檔最多預覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當前文檔最多預覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學公式或PPT動畫的文件,查看預覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負責整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細閱讀文檔內(nèi)容,確認文檔內(nèi)容符合您的需求后進行下載,若出現(xiàn)內(nèi)容與標題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。