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

dll庫問題函數

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

因此代碼寫爲:.net

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失敗:指針

難道是函數名出錯了?code

 

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

顯然確實和文檔給的不同,有多是不一樣編譯器的差別吧.因此修改代碼:文檔

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

運行後OK:編譯器

 

lib庫導入io

 

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

相關文章
相關標籤/搜索