初次使用QT编写上位机,遇到了问题。留个记录,供以后参考。使用QTCreator开发芯片烧录的上位机软件。QT的版本为开源的使用mingW编译器,用的VS2019编写的下位机USB驱动的dll库。开发完界面及文件功能后,往QT导入DLL库,发现运行出错,报错程序运行异常,后面发现该问题是QT编译器是32位而本人开发的USB驱动是64位的,好家伙直接重新开始写32位的USB驱动。再次导入DLL库,编译出错。确定了是编译器不同,mingw和MSVC两者对于函数的编译结果不太一样,于是开始更换QT的版本,这也是网上大部分推荐的方法,添加了VS2017的编译环境,配置后发现QT竟然无法识别到本机的配置,此路不通。最后发现是DLL库放错了位置,真的晕死。将文件放置到mingw的debug文件夹下面就好了,说明一下本人的USB驱动是从Linux下移植过来的,所以本人的解决方式仅供参考,还请各位具体问题具体分析。
在
Qt
Creator
中选择“File”->“New File or Project”,然后在左侧面板中选择“
Qt
Widgets Application”。请选择您喜欢的任何工具包,并单击“Finish”按钮。现在,我们需要将生成的myLib.
dll
文件复制到我们的
Qt
应用程序的目录中。将其放入项目目录的“lib”文件夹中,并将其添加到项目文件。最后,在我们的
Qt
应用程序中,我们可以使用库中定义的函数myFunc()。注意,这将自动在应用程序运行时链接到myLib.
dll
,并根据需要选择正确的版本。
发现有时候调用不成功,举例说明我的代码如下:
typedef int (*Fun)();
QLibrary testLib("Protocol.
dll
"); //已把
dll
放在debug中
if (testLib.load())
Fun getObj = (Fun)testLib.resolve(...
这个我是亲自尝试过了的,我的
Qt
是64位,调用32位
dll
一直不成功,所以位数一定要一致。
debug版本和release版本的
dll
和程序的版本对应一致,不然可能不成功。
这一个是我在
加载
失败
dll
之后在网上查找的可能原因,以防以后还遇到
加载
失败的情况记录下来。
1、将建立的
dll
库的文件用
QT
Creator
运行起来
2、找到生成的 xxx-Desktop_
Qt
_5_9_1_MinGW_32bit-Debug文件,其内Debug或者Release(这个需要看你自己用哪种方式编译)打开,将其里的 .
dll
和 .a文件复制到 要链..
声明: 事先我已经自己动手写了一个简单的
dll
文件(my
DLL
.
dll
),C版接口的。并且用我前两篇有关
DLL
文章里面的方法,从
dll
中导出了
导入
库(.lib)文件,
dll
中有两个函数,原型如下:voidHelloWorld(); //函数内部调用Win32 API,功能是弹出一个helloworld提示框intadd(inta,intb); //实现两个数相加,并返...