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