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