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然後重新編譯工程。

 

 

 

 

發佈了49 篇原創文章 · 獲贊 41 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章