胡勝文 萬加林
摘 要:針對LabVIEW8.6調(diào)用報表工具包生成的DLL過程中出現(xiàn)“NI_Word.lvclass”路徑無法找到的問題,做了詳細描述和分析,并提供了相應的解決方案。
關(guān)鍵詞:LabVIEW 8.6Word動態(tài)鏈接庫報表工具包面向?qū)ο?/p>
中圖分類號:TP3 文獻標識碼:A 文章編號:1672-3791(2012)07(a)-0007-02
LabVIEW是美國國家儀器(NI)公司推出的專門用于虛擬儀器開發(fā)的圖形化軟件編程平臺,吸引了大批開發(fā)者追隨,NI也根據(jù)市場需求每年推出一個新版本。但新技術(shù)的引用不可避免的也帶來了新的問題和BUG,尤其是升級后,很多硬件驅(qū)動不得不更新。LabVIEW 8.6版本是NI推出的所有版本中,大部分用戶公認比較成熟穩(wěn)定的版本。
NI 報表工具包從1.1.3開始采用面向?qū)ο蠹夹g(shù),重新設計,1.1.3和1.1.4版本是專為LabVIEW 8.6而定制使用的,而以前的版本如1.1.1、1.1.2(面向過程技術(shù))在LabVIEW 8.6下與自帶的Report函數(shù)不兼容。
1問題描述
應用開發(fā)環(huán)境以及報表工具包版本:LabVIEW 8.6 + Report Generation Toolkit 1.1.3。
在LabVIEW 8.6新建工程項目文件,并按照圖1和圖2建立相應的VI和文件。
當運行main.vi或Main.exe時,出現(xiàn)下面(圖3)報錯框。
而單獨運行1.vi或1.exe時,卻能正常運行。
2問題分析
根據(jù)問題報錯框描述,問題可能出現(xiàn)在“Get LV Class Default Value.vi”的上一層文件“Word class path.vi”傳遞出的NI_Word.lvclass路徑,圖4為報表工具包自帶的“Word class path.vi”程序框。
利用LabVIEW自帶診斷和調(diào)試工具,可獲得“Word class path”顯示的文件路徑,如表1所示。
(1)當運行main.vi時,由于是“Develo- pment system”環(huán)境下,根據(jù)路徑的分離規(guī)則,“NI_Word.lvclass”文件路徑應在當前DLL文件的下層目錄,并且布爾量選擇為False,即“..1.dllword NI_Word.lvclass”。
(2)當運行main.exe時,由于是在“Run Time system”環(huán)境下,布爾量的選擇為True,系統(tǒng)默認“NI_Word.lvclass”是在“.. 1.dllNI_Word.lvclass”。
(3)當運行1.vi時,由于是在“Develop- ment system”環(huán)境下,系統(tǒng)默認“NI_Word.lvclass”是在安裝路徑下,而且在該路徑下可以找到此文件。
(4)當運行1.exe時,由于是在“Run Time system”環(huán)境下,系統(tǒng)默認“NI_Word.lvclass”是在當前EXE文件的下層目錄,即“.. 1.exeNI_Word.lvclass”。
現(xiàn)根據(jù)以前NI在對exe生成過程的描述,是將所有vi都轉(zhuǎn)移到exe目錄[1],例如a.vi路徑為“c:a.vi”,當生成exe時,路徑變?yōu)椤癱:a.exea.vi”,這點也可以從運行1.exe,“NI_Word.lvclass”的路徑可以看出。
由于DLL生成過程類似于exe,以及上述運行結(jié)果分析,“NI_Word.lvclass”應該是在1.dll目錄下,而在實際應用中,在“..1.dll”或“..1.dllword”卻找不到該路徑。
如果在DLL的生成過程中,添加“NI_Word.lvclass”到“始終包括”中,需要注意的是,需在項目瀏覽器(工程項目)中手動添加“NI_Word.lvclass”文件“…Nationalinstruments
LabVIEW8.6Vi.libutilityNIReport.llbWord”,重新生成DLL,運行“main.vi”或“main.exe”失敗。
如果修改“Word class path.vi”,指定一個固定路徑給“NI_Word.lvclass”,如圖5所示,卻能夠正常運行。
可見在生成DLL的過程中,并沒有將“NI_Word.lvclass”包含到DLL的目錄下。
3解決方案
3.1 版本降級使用
當使用LabVIEW 8.5和Report Generation Toolkit 1.1.2以下版本時,不存在此類問題(升級為LabVIEW 2010+Report Generation Toolkit 2010也存在此類問題)。
3.2 指定“NI_Word.lvclass”為一固定路徑
(1)從安裝路徑復制“NI_Word.lvclass”到DLL生成路徑。
(2)修改“New Report.vi”中的“Word class path.vi”(圖7)。
3.3 改造函數(shù)庫和使用方法
(1)修改“New Report.vi”中的“Word class path.vi”,使得生成DLL時文件路徑不同,但同時不影響編輯狀態(tài)(Development system)和生成EXE狀態(tài)(Run Time system)下的文件路徑,如圖7所示。
(2)在項目瀏覽器(工程項目)中添加“NIReport.llb”(“…LabVIEW8.6Vi.libutilityNIReport.llb”)。
(3)在“源文件”目標中,在“始終包括”添加NI_Word.lvclass、NI_Html.lvclass、NI_Report.lvclass、NI_Standard Report.lvclass,需要注意的是,如果1.vi作為某一個VI的子VI時,并且該VI生成DLL時,還需添加“Word class path.vi”。
(4)在“目標”中,添加對應的文件夾,命名要相同,如“NI_Word”,“右側(cè)類別”勾選llb,在目標路徑中修改為“..dlldata NI_Word.dll”;其它類似。
(5)在“源文件設置”中,把四個lvclass文件設置為對應的文件夾目標,如圖8所示。
需要進一步說明的是,如果生成的文件中有“NI_ReportGenerationToolkit”類似的文件夾,則在“附加排除項”中,勾選“斷開連接自定義類型”。
4結(jié)語
(1)當用到有關(guān)Excel的VI時,也會存在此類問題,只需按照對Word的處理方法即可(“Excel class path.vi”和“NI_excel.lvclass”)。
(2)在生成exe時,如果想解決生成的exe目錄內(nèi)一大堆的VI和文件夾時,可以采用類似的第三種方法。
(3)LabVIEW 2010+ Report Generation Toolkit 2010解決了生成的exe目錄內(nèi)一大堆的VI和文件夾問題(但對DLL找不到路徑這個問題還未解決)。對DLL問題可以采取類似于上述的三種解決方案。
參考文獻
[1] 阮奇幀.我和LabVIEW:一個NI工程師的十年編程經(jīng)驗[M].北京:北京航空航天大學出版社,2009.