天天看點

qt 顯式連結 導入多個dll庫沖突

qt 顯式連結 dll庫 QSerial QTCPSocket 對象沖突問題

公司的項目需要導入多個dll庫,其中都用到了序列槽和tcp通信,最後問題解決說到底還是自己對顯式連結的不熟悉導緻,在這個點上卡了很久,希望遇到和我一樣問題的朋友們可以快速解決。

在調用QLibrary的第二步,resolve()函數需要用到dll庫的導出函數名,由于我自己一開始沒有加上extern “C",因為我自己下了個DLL函數檢視器,裡面他會自動給函數名前後加上一些奇怪的字元,我就直接複制過來,如圖:

qt 顯式連結 導入多個dll庫沖突

這樣在隻導入一個dll庫的時候是沒有影響的,但是多個庫導入就會發生沖突,程式會直接發生段錯誤,異常終止。

我請教了一下公司的前輩,告訴我寫個導出函數,封裝一個類對象,通過對象指針調用dll庫的方法,可惜我太菜了,琢磨不明白,想起之前網上說通過extern ”C“ 可以讓導出函數名正常,就嘗試了一下:

更改前:

qt 顯式連結 導入多個dll庫沖突

更改後:

qt 顯式連結 導入多個dll庫沖突

放的是兩個庫的導出類頭檔案,函數不一樣,但大概意思就是上面的改到下面的這種形式,然後運作就不會沖突啦,别忘記把resolve函數的參數改成正常的。

qt 顯式連結 導入多個dll庫沖突

繼續閱讀