調(diào)用外部DLL/LIB程序
在用戶自定義開發(fā)過程中,常常會遇到需要調(diào)用外部 DLL/LIB 程序文件的需求,這些文件可能是用戶自己編寫的,也可能是其它供應(yīng)商提供的。TSMaster 支持調(diào)用外部二進(jìn)制程序庫,但必須通過一定的方法進(jìn)行封裝。本節(jié)內(nèi)容以調(diào)用 NI 公司的 TDMS 文件記錄程序?yàn)槔菔痉庋b DLL 庫的方法,而 LIB 庫的使用與 DLL 類似,用戶可以在 visual studio工程中執(zhí)行類似操作實(shí)現(xiàn)。
一 獲取外部程序庫
NI 公司的 TDMS 庫可以通過此鏈接下載,對于外部庫的使用,請注意以下限制:
1. 在下載外部程序庫的過程中,請注意發(fā)布程序庫的使用協(xié)議,同星公司僅提供外部程序庫的使用環(huán)境,不為違反外部庫使用協(xié)議的行為負(fù)責(zé);
2. 外部庫被 TSMaster 載入后,即成為了主程序的一部分,如果外部庫發(fā)生了崩潰/內(nèi)存溢出等行為,會導(dǎo)致 TSMaster 程序不穩(wěn)定或崩潰,此時需要重新打開軟件并卸載有問題的外部庫;
3. TSMaster 僅支持 32bit-msvc 版本的外部庫,請使用合適版本的 DLL/LIB 文件,否則會導(dǎo)致編譯過程出錯。
(在附件的“tdms_example\TDM C DLL”目錄下,可以找到解壓后的 TDMS 外部庫相關(guān)文件。)
二 準(zhǔn)備外部庫調(diào)用模板
該模板可以從 TSMaster 程序中拷貝,通過 幫助->api 例程-> Mini Program SDK 目錄下名為 VC++的工程,將該工程復(fù)制到其它用戶自定義的位置備用即可。
在附件“tdms_example\tdms_sdk”可以看到為 TDMS 功能準(zhǔn)備的工程。
三 編輯模板并生成DLL
無論外部庫是 DLL 還是 LIB,或者兩者均有,都可以在模板工程中被調(diào)用。需要注意的是,為了能夠使得 TSMaster 能夠正常識別,用戶在準(zhǔn)備模板工程過程中,除了實(shí)現(xiàn)自己的邏輯外,還需要提供函數(shù)的注釋,參數(shù)說明等信息。具體方法可以打開默認(rèn)模板文件,在全局搜索 fun1 關(guān)鍵字,該函數(shù)為一個示例函數(shù),它出現(xiàn)的地方,也就是用戶需要添加自定義內(nèi)容的地方。
如上圖所示,可以看到在 MPLibCode.cpp 文件中,實(shí)現(xiàn)了 fun1 函數(shù)的聲明和實(shí)現(xiàn),在 MPLibCodeExtern.cpp 文 件 中 , 向 dll 管 理 模 板 注 冊 了 函 數(shù) fun1 的 存 在 , 在 TSMasterBaseSource.cpp 文件中,向 dll 管理模板注冊了 fun1 函數(shù)的相關(guān)參數(shù)信息。
在集成 TDMS 功能過程中,首先需要將編譯過程需要的 h 文件和 lib 文件拷貝到工程目錄下,并在工程鏈接器中將 LIB 文件作為輸入。對于外部函數(shù),例如 TDMS 庫自帶的DDC_CreateFile 函數(shù),在模板中使用一個新的函數(shù)進(jìn)行封裝,將其命名為 tdms_CreateFile。盡管 LIB 文件的函數(shù)可以直接導(dǎo)出,但通常建議新建一個函數(shù)對它進(jìn)行封裝,一是可以統(tǒng)一函數(shù)的名稱,便于用戶區(qū)分,而是所有 API 的函數(shù)返回值必須為 int 類型,如果原生外部庫不是該返回類型,則必須通過傳遞指針等方式獲取返回值,此時必須通過封裝的形式使用。
TDMS 其它的函數(shù)封裝過程請參考示例工程,請務(wù)必注意封裝函數(shù)代碼和函數(shù)注冊代碼需要匹配,才能正確工作。基于該模板,在 Debug/Release-x86 模式下,可以生成所需的“tdms_sdk.dll”。
四 在TSMaster中調(diào)用模板DLL
為了在 TSMaster 中調(diào)用“tdms_sdk.dll”,可以將該 dll 直接拖入,或者通過仿真->小程序庫->加載的方式載入,如下圖所示,直接加載會失敗,這是由于模板 dll 依賴了 TDMS運(yùn)行時 DLL 文件,依賴文件在“tdms_example\TDM C DLL\dev\bin\32-bit”目錄下,由 NI公司提供,將所有文件拷貝到 TSMaster 工程\Plugins\Dependencies 目錄下(這個目錄需要手動創(chuàng)建,默認(rèn) TSMaster 不會創(chuàng)建),再載入模板 dll,即可正確載入。
打開示例工程“tdms_example\tdms_example”,在測試系統(tǒng)的第一條用例,為 TDMS文件生成測試代碼。用戶也可以新建小程序來調(diào)用,兩者在操作上沒有區(qū)別,都需先在屬性窗口中,勾選所需外部庫,然后在腳本程序中調(diào)用所需函數(shù)。如下圖所示,腳本運(yùn)行后會在 D 盤根目錄下創(chuàng)建一個示例 TDMS 文件。
直接運(yùn)行該腳本,可以發(fā)現(xiàn)程序能夠運(yùn)行但并未按需創(chuàng)建 TDMS 文件,通過運(yùn)行記錄文件查看錯誤消息,可以看到提示未能打開存儲設(shè)備。這個問題是 TDMS 庫所特有的,因?yàn)樗囊蕾囄募校?dll 外,還包含一個名為 DataModels 的文件夾,TSMaster 在使用“tdms_example\Plugins\Dependencies”目錄下的依賴文件時,不會對文件夾進(jìn)行關(guān)聯(lián),因此需要手動把該文件夾復(fù)制到 TSMaster 安裝程序目錄,例如“C:\ProgramFiles(x86)\TOSUN\TSMaster\bin”。有些外部庫只有 dll 依賴,則不需要手動復(fù)制操作。
解決依賴的文件夾后,即可正確生成 TDMS 文件。用戶可以參考以上過程,實(shí)現(xiàn)自己的邏輯。整個過程需要對 visual stuido 環(huán)境具備一定了解,如有不清楚的地方,請參考示例工程。
五 在TSMaster中調(diào)試模板DLL
在使用模板 dll 過程中,不可避免存在調(diào)試過程。用戶可以修改模板 visual stuido 中項(xiàng)目屬性->常規(guī)->輸出目錄,將 dll 的目錄輸出到調(diào)試使用的工程中“MPLibrary”目錄下。例如將“tdms_example”示例中 dll 生成到“tdms_example\tdms_example\MPLibrary”下,然后先運(yùn)行 TSMaster 工程,再啟動 visual stuido 調(diào)試功能。調(diào)試過程與小程序調(diào)試方法一致,可以參考小程序的調(diào)試過程。
-
dll
+關(guān)注
關(guān)注
0文章
116瀏覽量
45549
發(fā)布評論請先 登錄
相關(guān)推薦
QT調(diào)用動態(tài)庫開發(fā)IC卡讀寫程序
當(dāng)matlabappdesigner打包成exe文件后,如何調(diào)用外部的函數(shù).m程序?
解決方案 | 基于TSMaster的平板電腦解決方案
![解決方案 | 基于<b class='flag-5'>TSMaster</b>的平板電腦解決方案](https://file.elecfans.com/web2/M00/40/07/pYYBAGJrUk2AaMaTAAAQONQtdzo461.jpg)
MMC DLL調(diào)優(yōu)
![MMC <b class='flag-5'>DLL</b>調(diào)優(yōu)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
干貨分享 | TSMaster軟件指南
![干貨分享 | <b class='flag-5'>TSMaster</b>軟件指南](https://file.elecfans.com/web2/M00/40/07/pYYBAGJrUk2AaMaTAAAQONQtdzo461.jpg)
虹科干貨 輕松掌握PCAN-Explorer 6,dll調(diào)用一文打盡!
![虹科干貨 輕松掌握PCAN-Explorer 6,<b class='flag-5'>dll</b><b class='flag-5'>調(diào)用</b>一文打盡!](https://file1.elecfans.com//web2/M00/04/87/wKgZombP0zuAGzv6AACaD3t--K0398.png)
TSMaster 測試報告生成器操作指南
![<b class='flag-5'>TSMaster</b> 測試報告生成器操作指南](https://file.elecfans.com/web2/M00/40/07/pYYBAGJrUk2AaMaTAAAQONQtdzo461.jpg)
TSMaster RPC 基礎(chǔ)入門:編程指導(dǎo)和使用說明
![<b class='flag-5'>TSMaster</b> RPC 基礎(chǔ)入門:編程指導(dǎo)和使用說明](https://file.elecfans.com/web2/M00/40/07/pYYBAGJrUk2AaMaTAAAQONQtdzo461.jpg)
LabVIEW調(diào)用Aspose.dll實(shí)現(xiàn)excel讀寫、圖片插入,
TSMaster 的 CAN UDS 診斷操作指南(下)
![<b class='flag-5'>TSMaster</b> 的 CAN UDS 診斷操作指南(下)](https://file.elecfans.com/web2/M00/40/07/pYYBAGJrUk2AaMaTAAAQONQtdzo461.jpg)
TSMaster 的 CAN UDS 診斷操作指南(上)
![<b class='flag-5'>TSMaster</b> 的 CAN UDS 診斷操作指南(上)](https://file.elecfans.com/web2/M00/40/07/pYYBAGJrUk2AaMaTAAAQONQtdzo461.jpg)
TSMaster 中 Hex 文件編輯器使用詳細(xì)教程
![<b class='flag-5'>TSMaster</b> 中 Hex 文件編輯器使用詳細(xì)教程](https://file.elecfans.com/web2/M00/40/07/pYYBAGJrUk2AaMaTAAAQONQtdzo461.jpg)
TSMaster VLAN配置方法
![<b class='flag-5'>TSMaster</b> VLAN配置方法](https://file.elecfans.com/web2/M00/40/07/pYYBAGJrUk2AaMaTAAAQONQtdzo461.jpg)
虹科干貨丨輕松掌握PCAN-Explorer 6,dll調(diào)用一文打盡!
![虹科干貨丨輕松掌握PCAN-Explorer 6,<b class='flag-5'>dll</b><b class='flag-5'>調(diào)用</b>一文打盡!](https://file1.elecfans.com/web2/M00/CF/3D/wKgZomYh2EOANu1NAFMq1I4bpo4699.png)
在TSMaster中加載基于DotNet平臺的Seed&amp;Key
![在<b class='flag-5'>TSMaster</b>中加載基于DotNet平臺的Seed&amp;Key](https://file.elecfans.com/web2/M00/40/07/pYYBAGJrUk2AaMaTAAAQONQtdzo461.jpg)
評論