45.QT-連接外部dll,lib庫導入問題


dll庫問題

查看MZ_Card.dll對應的文檔手冊,如下圖所示:

所以代碼寫為:

typedef BOOL (*Fun)(BOOL IsOpenComm,unsigned long Port,  unsigned long nBaud, unsigned int BeepCnt); //定義函數指針 
void func() {  Fun open=(Fun)mylib.resolve("MZ_Card.dll","SendBeep");    //援引函數
       if (open)                  //是否成功連接上函數
 { qDebug()<<"Link to Function is OK!"; qDebug()<<open(true,19,38400,2);      //這里函數指針調用dll中的SendBeep函數
 } else qDebug()<<"Linke to Function is not OK!!!!"; }

運行打印,發現調用resolve失敗:

難道是函數名出錯了?

 

用記事本打開MZ_Card.dll,搜索SendBeep關鍵字,找到如下圖所示:

顯然確實和文檔給的不一樣,有可能是不同編譯器的差異吧.所以修改代碼:

Fun open=(Fun)mylib.resolve("MZ_Card.dll","_SendBeep@16");

運行后OK:

 

lib庫導入

 

LIBS += -LE:/project/QT/usbcan_info/ -lControlCAN

 

下面對這句話進行解析:

 

1)+=這個符號是連接在一起的,不要自做聰明,給分開了,寫成+ = ,這樣就是錯的!

 

2)+=的左右兩邊可以有空格,也可以沒有空格,隨意的

 

3)-L之后緊接着就跟着.lib文件所在的目錄,比如,我的目錄是在E盤下的project目錄下的QT目錄下的usbcan_info下,注意,是緊跟着,不要分開,分開就錯啦!

 

4)-l后面跟着的是.lib的文件名,注意,比如你的.lib文件時ControlCAN.lib,不要傻乎乎的寫成了-lControlCAN.lib,不要帶后綴,要寫成-lControlCAN,同樣,-l后面也沒有空格

 

 來自https://blog.csdn.net/qq_22374265/article/details/79349779


免責聲明!

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



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