Qt探索之路——加載第三方API


date:2017/04/24 14:42

開發環境:Qt 5.8.0 msvc2015 32bit + VS Community 2015

由於Qt不帶有完整的USB API,因此在做通信時需要使用第三方API來實現。

1、編譯生成API庫文件

首先介紹一下要用到的API。

我做的是hid通信,網上常見API有三種:

HID API(下載地址:http://github.com/signal11/hidapi/downloads

libusb(下載地址:https://github.com/libusb/libusb/archive/master.zip

libhid(下載地址:http://alioth.debian.org/frs/?group_id=30451

其中hidapi和libhid均是基於libusb針對hid設備接口進行二次開發而成。我在項目中剛開始使用的是hidapi,目前正在嘗試libhid。

這里簡單說明一下hidapi和libhid的區別:

hidapi可以說是libapi的簡化版,使用更為簡便,但功能也相對單一,僅提供基本的設備初始化、枚舉、關閉、讀寫操作。作者@飛奔在原野這篇博客中寫道:

  HIDAPI只能提供對單一接口、單一端點的控制,也就是說,它只能控制默認接口、默認端點的數據傳輸。

而libhid則可以實現對HID設備的多接口、多端點的控制,通過查看源碼可以證實這一點:

hidapi:

int HID_API_EXPORT HID_API_CALL hid_read(hid_device *device,
unsigned char *data,
size_t length
)
libhid:
hid_return hid_interrupt_read(HIDInterface *const hidif,
unsigned int const ep,//指定傳輸端口 char *const bytes,
unsigned int const size,
unsigned int const timeout    
)

傳輸方式均為中斷傳輸。

(關於USB中的傳輸方式,可以參考:usb中的endpoint(端點)和傳輸模式

然后開始生成庫文件。

上述的api都提供了Windows、Linux、Mac OS等多平台支持。以我使用的Windows為例,找到msvc文件夾(或者Windows相關文件夾)打開vs的解決方案文件.sln,運行vs2015進行編譯。注意,在生成——配置管理器中,如果開發平台選的是Win32,相應的Qt編譯器也必須是32位(例如我的就是msvc2015_x86)。如果平台不對應會導致Qt工程加載api庫后找不到相關文件。

 

2、添加庫文件

庫文件生成成功后,在win32——debug——dll文件夾中找到.dll和.lib文件,拷貝到Qt工程所在目錄下,同時還需要拷貝api的頭文件.h並將頭文件包含到其他頭文件中。在Qt工程配置文件.pro中,右鍵——添加庫——外部庫,添加文件路徑,即可將庫文件添加到Qt工程。

這時,如果馬上調用庫中的函數進行編譯,Qt可能會報錯LNK2019或者LNK1120:

因此在添加庫文件后,最好將構建目錄的Debug(或者Release)文件夾刪除,重啟Qt然后重新編譯工程。

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM