一種基于LabVIEW的動態(tài)鏈接庫的調(diào)用方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及動態(tài)鏈接的調(diào)用方法。更具體地,涉及一種基于圖形化編程語言 LabVIEW的動態(tài)鏈接庫的調(diào)用方法。
【背景技術(shù)】
[0002] 動態(tài)鏈接庫是一種在運行時連接的可執(zhí)行代碼和數(shù)據(jù)模塊,是Microsoft Windows系統(tǒng)操作系統(tǒng)的重要組成部分,是一種特殊的且現(xiàn)在廣為應(yīng)用的函數(shù)庫。動態(tài)鏈接 庫DLL雖不是exe文件,但它屬于Windows可執(zhí)行文件。DLL由可執(zhí)行模塊組成,為進(jìn)程提 供數(shù)據(jù)、代碼和資源。與編譯時使用的靜態(tài)鏈接庫不同的是,動態(tài)鏈接庫獨立于激活它們的 可執(zhí)行文件,調(diào)用的地址轉(zhuǎn)換是在加載時解決的。與靜態(tài)連接庫相比,動態(tài)連接庫不管被多 少個程序設(shè)計,內(nèi)存中都只有一個DLL的副本,因此提高了內(nèi)存的使用率和程序運行速度, 而且各個DLL文件可以方便的獨立修改和測試,模塊化更強(qiáng)。
[0003] 動態(tài)鏈接庫DLL是一種可執(zhí)行模塊,往往以單獨的文件形式存在,在Windows下的 后綴名一般為.dll。動態(tài)鏈接庫有兩種使用方法:一個是靜態(tài)調(diào)用,另外一種是動態(tài)調(diào)用。 DLL的靜態(tài)調(diào)用類似于靜態(tài)庫的用法,程序一啟動就把DLL中的代碼裝入內(nèi)存。DLL的動態(tài) 調(diào)用稍微麻煩一點,但是它更加靈活,可以更為有效地使用內(nèi)存。動態(tài)鏈接庫技術(shù)是一種在 程序需要的時候才將有關(guān)代碼裝入內(nèi)存的技術(shù)。實際當(dāng)中動態(tài)鏈接庫的可執(zhí)行代碼存在 于.dll文件中,而.dll文件是由編譯器直接生成的。一個函數(shù)被編譯運行后,其可執(zhí)行指 令便存在于內(nèi)存中了,而這段可執(zhí)行指令在內(nèi)存中的開始地址,是可以通過函數(shù)名得到的。 因此,只要把某個函數(shù)名所指單元開始的一段內(nèi)存內(nèi)容寫入文件,便得到了一個簡單的動 態(tài)鏈接庫文件。
[0004] 動態(tài)鏈接庫代碼在運行時間加載的特性很重要。一個大型程序如果不使用動態(tài)鏈 接庫,那么當(dāng)這個程序的某一個功能需要升級或改進(jìn),必須寫一些源代碼,然后將整個程序 編譯,連接形成一個新的可執(zhí)行文件,最終給客戶重新安裝使用。這個過程需要花費很長時 間,哪怕只是給這個大型程序多寫一行代碼??墒?,如果采用大量動態(tài)鏈接庫構(gòu)建整個應(yīng)用 程序,那么只需要改寫需要升級的動態(tài)鏈接庫的源代碼,重新編譯連接后,發(fā)送給客戶,客 戶所做的僅僅是覆蓋原來的動態(tài)鏈接庫即可,不需要重新安裝整個應(yīng)用程序,因此使用動 態(tài)鏈接庫構(gòu)建整個應(yīng)用程序是模塊化設(shè)計程序的一個重要特點。
[0005] 從編程的角度,DLL應(yīng)用程序需要知道DLL文件導(dǎo)出的API函數(shù)才能調(diào)用。所以 DLL文件本身并不可以運行,需要應(yīng)用程序調(diào)用。程序的發(fā)布上,DLL和靜態(tài)lib也是有差 別的。對于靜態(tài)1 ib,程序在編譯成可執(zhí)行文件時會把靜態(tài)鏈接庫中的程序拷進(jìn)可執(zhí)行文件 中,所以lib文件是不用同可執(zhí)行文件一同發(fā)布的。而鏈接到動態(tài)庫DLL中時要通過一個 lib文件,lib文件保存了函數(shù)或類在DLL中的入口地址,可執(zhí)行文件中相應(yīng)存放的也是函 數(shù)地址,所以DLL和lib要同可執(zhí)行文件一起發(fā)布。實際上只要遵循約定的DLL接口規(guī)范 和調(diào)用方式,用各種語言編寫的DLL都可以相互調(diào)用。Windows提供的系統(tǒng)DLL,其中包括 了 Windows的API,在任何開發(fā)環(huán)境中都能被調(diào)用。
[0006] LabVIEW是美國國家儀器公司NI推出的32位的標(biāo)準(zhǔn)虛擬儀器開發(fā)平臺。它是一 套專門為數(shù)據(jù)采集與儀器控制、數(shù)據(jù)分析與數(shù)據(jù)表達(dá)而設(shè)計的圖形化編程環(huán)境,同時是基 于圖形化編程語言--G-language的全新編程方法。
[0007] LabVIEW具有各種各樣、功能強(qiáng)大的函數(shù)庫,包括數(shù)據(jù)采集、GPIB、儀器控制、數(shù)據(jù) 分析、信號處理、數(shù)據(jù)顯示及數(shù)據(jù)存儲等功能。并且提供強(qiáng)大的數(shù)學(xué)分析庫,涵蓋統(tǒng)計、估 計、回歸分析、線形代數(shù)、信號生成算法、時域和頻域算法等眾多科學(xué)領(lǐng)域。因此LabVIEW在 包括航空、航天、通信、汽車和醫(yī)學(xué)等眾多領(lǐng)域得到了廣泛的應(yīng)用,己成為測試與測量領(lǐng)域 的工業(yè)標(biāo)準(zhǔn)。但LabVIEW也存在不足,如不擅長于完成大量數(shù)據(jù)處理的任務(wù);實現(xiàn)底層操作 能力不強(qiáng)等。在LabVIEW開發(fā)環(huán)境中若遇到這類問題。就可通過LabVIEW的高級應(yīng)用,將 其不擅長或不易實現(xiàn)的任務(wù)通過能夠或更適于完成此類任務(wù)的其它語言來實現(xiàn)。
[0008] 因此,需要提供一種基于LabVIEW的動態(tài)鏈接庫的調(diào)用方法。
【發(fā)明內(nèi)容】
[0009] 本發(fā)明的目的在于提供一種基于LabVIEW的動態(tài)鏈接庫的調(diào)用方法。
[0010] 為達(dá)到上述目的,本發(fā)明采用下述技術(shù)方案:
[0011] 一種基于LabVIEW的動態(tài)鏈接庫的調(diào)用方法,該方法包括如下步驟:
[0012] S1、確定動態(tài)鏈接庫DLL文件的位置、函數(shù)原型,以及函數(shù)的參數(shù)及類型;
[0013] S2、選取函數(shù)調(diào)用的方式;
[0014] S3、利用LabVIEW中調(diào)用庫函數(shù)節(jié)點CLF提取DLL文件中的函數(shù);
[0015] S4、基于LabVIEW的規(guī)范配置DLL文件中的函數(shù);
[0016] S5、輸入被調(diào)用的函數(shù)名,得到基于LabVIEW配置完成的函數(shù)的形參類型和返回 值類型;
[0017] S6、將CLF中的節(jié)點和與其數(shù)據(jù)類型節(jié)點相對應(yīng)的屬性結(jié)點連接,完成利用 LabVIEW的代碼設(shè)計。
[0018] 優(yōu)選地,步驟S1中函數(shù)的參數(shù)及類型包括返回的數(shù)據(jù)的類型以及形參和實參的 數(shù)據(jù)類型。
[0019] 優(yōu)選地,步驟S2中函數(shù)調(diào)用的方式為C語言中stdcall調(diào)用方式。
[0020] 優(yōu)選地,步驟S3中CLF包括輸入端和輸出端,CLF具有函數(shù)的可擴(kuò)展功能,可顯示 已連線的輸入端和輸出端的數(shù)據(jù)類型。
[0021] 優(yōu)選地,步驟S5中的返回值為DLL中函數(shù)的返回值。
[0022] 本發(fā)明的有益效果如下:
[0023] 本發(fā)明所述技術(shù)方案適用于LabVIEW中動態(tài)鏈接庫的調(diào)用方法,應(yīng)用了 LabVIEW 中"調(diào)用庫函數(shù)節(jié)點"實現(xiàn)了動態(tài)鏈接庫的調(diào)用基于LabVIEW的動態(tài)鏈接庫的應(yīng)用,一方面 通過LabVIEW中使用CLF--Call Library Function函數(shù)來調(diào)用其它語言產(chǎn)生的動態(tài)鏈 接庫函數(shù),從而完成LabVIEW無法勝任的工作。例如LabVIEW無法識別的采集卡的驅(qū)動。另 一方面由于LabVIEW在測試與測量領(lǐng)域的強(qiáng)大功能,因此可以利用LabVIEW生成各種相關(guān) 動態(tài)鏈接庫函數(shù),方便其它語言程序調(diào)用,從而彌補(bǔ)它們在測試、信號分析領(lǐng)域的函數(shù)和功 能模塊較少的不足,以及程序編制難度較大等缺點,提高了程序開發(fā)的效率,增加了應(yīng)用軟 件的功能。
【附圖說明】
[0024] 下面結(jié)合附圖對本發(fā)明的【具體實施方式】作進(jìn)一步詳細(xì)的說明。
[0025] 圖1示出調(diào)用庫函數(shù)節(jié)點CLF具體函數(shù)示意圖。
[0026] 圖2示出LabVIEW調(diào)用動態(tài)鏈接庫的配置示意圖。
[0027] 圖3示出PmacSelect函數(shù)動態(tài)鏈接庫的配置圖。
[0028] 圖4示出LabVIEW使用的PmacSelect子函數(shù)具體內(nèi)容示意圖。
[0029] 圖5示出OpenPmacDevice函數(shù)動態(tài)鏈接庫的配置圖。
[0030] 圖6示出LabVIEW使用的OpenPmacDevice子函數(shù)具體內(nèi)容示意圖。
[0031] 圖7示出PmacGetControlResponseA函數(shù)動態(tài)鏈接庫的配置圖。
[0032] 圖8不出LabVIEW使用的PmacGetControlResponseA子函數(shù)具體內(nèi)容不意圖。
[0033] 圖9示出基于LabVIEW的動態(tài)鏈接庫的調(diào)用方法流程圖。
【具體實施方式】
[0034] 為了更清楚地說明本發(fā)明,下面結(jié)合優(yōu)選實施例和附圖對本發(fā)明做進(jìn)一步的說 明。附圖中相似的部件以相同的附圖標(biāo)記進(jìn)行表示。本領(lǐng)域技術(shù)人員應(yīng)當(dāng)理解,下面所具 體描述的內(nèi)容是說明性的而非限制性的,不應(yīng)以此限制本發(fā)明的保護(hù)范圍。
[0035] 本實施方式提供的基于LabVIEW的動態(tài)鏈接庫的調(diào)用方法,包括如下步驟:
[0036] S1、確定動態(tài)鏈接庫DLL文件的位置、函數(shù)原型,以及函數(shù)的參數(shù)及類型,函數(shù)的 參數(shù)及類型包括返回的數(shù)據(jù)類型及形參和實參的數(shù)據(jù)類型;對應(yīng)了調(diào)用庫函數(shù)節(jié)點中路徑 輸入?yún)?shù),即需要確定調(diào)用的動態(tài)鏈接庫的路徑,在實際的調(diào)用過程中需要選擇所要調(diào)用 的庫函數(shù)在程序框圖中所指定的鏈接路徑,當(dāng)鏈接路徑選擇后就會在調(diào)用庫函數(shù)節(jié)點上顯 示該輸入端的連線;
[0037] S2、選取函數(shù)調(diào)用的方式,調(diào)用函數(shù)的方式是采用C語言中stdcall調(diào)用方式,其 中LabVIEW和32位系統(tǒng)C語言Win32數(shù)據(jù)類型對照表如表1所示;
[0038] 表 1
【主權(quán)項】
1. 一種基于UbVIEW的動態(tài)鏈接庫的調(diào)用方法,其特征在于,該方法包括如下步驟: 51、 確定動態(tài)鏈接庫化L文件的位置、函數(shù)原型,W及函數(shù)的參數(shù)及類型; 52、 選取函數(shù)調(diào)用的方式; 53、 利用UbVIEW中調(diào)用庫函數(shù)節(jié)點化F提取化L文件中的函數(shù); 54、 基于UbVIEW的規(guī)范配置化L文件中的函數(shù); 55、 輸入被調(diào)用的函數(shù)名,得到基于UbVIEW配置完成的函數(shù)的形參類型和返回值類 型; 56、 將CLF中的節(jié)點和與其數(shù)據(jù)類型節(jié)點相對應(yīng)的屬性結(jié)點連接,完成利用UbVIEW的 代碼設(shè)計。
2. 根據(jù)權(quán)利要求1所述的基于LabVIEW的動態(tài)鏈接庫的調(diào)用方法,其特征在于,所述步 驟S1中函數(shù)的參數(shù)及類型包括返回的數(shù)據(jù)的類型W及形參和實參的數(shù)據(jù)類型。
3. 根據(jù)權(quán)利要求1所述的基于LabVIEW的動態(tài)鏈接庫的調(diào)用方法,其特征在于,所述步 驟S2中函數(shù)調(diào)用的方式為C語言中stdcall調(diào)用方式。
4. 根據(jù)權(quán)利要求1所述的基于UbVIEW的動態(tài)鏈接庫的調(diào)用方法,其特征在于,所述 步驟S3中CLF的具體函數(shù)的參數(shù)包括;路徑輸入?yún)?shù)、錯誤輸入?yún)?shù)、庫函數(shù)的范例輸入?yún)?數(shù)、路徑輸出參數(shù)、錯誤輸出參數(shù)、返回值和庫函數(shù)的范例輸出參數(shù)。
5. 根據(jù)權(quán)利要求1所述的基于LabVIEW的動態(tài)鏈接庫的調(diào)用方法,其特征在于,所述步 驟S3中CLF包括輸入端和輸出端,CLF具有函數(shù)的可擴(kuò)展功能,可顯示已連線的輸入端和 輸出端的數(shù)據(jù)類型。
6. 根據(jù)權(quán)利要求1所述的基于LabVIEW的動態(tài)鏈接庫的調(diào)用方法,其特征在于,所述步 驟S5中的返回值為化L中函數(shù)的返回值。
【專利摘要】本發(fā)明公開一種基于LabVIEW的動態(tài)鏈接庫的調(diào)用方法,包括:確定動態(tài)鏈接庫DLL文件的位置、函數(shù)原型,以及函數(shù)的參數(shù)及類型;選取函數(shù)調(diào)用的方式;利用LabVIEW中調(diào)用庫函數(shù)節(jié)點CLF提取DLL文件中的函數(shù);基于LabVIEW的規(guī)范配置DLL文件中的函數(shù);輸入被調(diào)用的函數(shù)名,得到基于LabVIEW配置完成的函數(shù)的形參類型和返回值類型;將CLF中的節(jié)點和與其數(shù)據(jù)類型節(jié)點相對應(yīng)的屬性結(jié)點連接,完成利用LabVIEW的代碼設(shè)計。本發(fā)明所述技術(shù)方案通過LabVIEW中使用CLF來調(diào)用其它語言產(chǎn)生的動態(tài)鏈接庫函數(shù),從而完成LabVIEW無法勝任的工作,提高了程序開發(fā)的效率。
【IPC分類】G06F9-46
【公開號】CN104536812
【申請?zhí)枴緾N201410838583
【發(fā)明人】楊金濤, 馬永光
【申請人】北京無線電計量測試研究所
【公開日】2015年4月22日
【申請日】2014年12月30日