qt 显式链接 dll库 QSerial QTCPSocket 对象冲突问题

公司的项目需要导入多个dll库,其中都用到了串口和tcp通信,最后问题解决说到底还是自己对显式链接的不熟悉导致,在这个点上卡了很久,希望遇到和我一样问题的朋友们可以快速解决。

在调用QLibrary的第二步,resolve()函数需要用到dll库的导出函数名,由于我自己一开始没有加上extern “C",因为我自己下了个DLL函数查看器,里面他会自动给函数名前后加上一些奇怪的字符,我就直接复制过来,如图:

qt 显式链接 导入多个dll库冲突_异常终止

这样在只导入一个dll库的时候是没有影响的,但是多个库导入就会发生冲突,程序会直接发生段错误,异常终止。

我请教了一下公司的前辈,告诉我写个导出函数,封装一个类对象,通过对象指针调用dll库的方法,可惜我太菜了,琢磨不明白,想起之前网上说通过extern ”C“ 可以让导出函数名正常,就尝试了一下:

更改前:

qt 显式链接 导入多个dll库冲突_异常终止_02

更改后:

qt 显式链接 导入多个dll库冲突_qt_03

放的是两个库的导出类头文件,函数不一样,但大概意思就是上面的改到下面的这种形式,然后运行就不会冲突啦,别忘记把resolve函数的参数改成正常的。

qt 显式链接 导入多个dll库冲突_导出函数_04