• 2588阅读
  • 5回复

[提问]如何在vs2013上编译一个dll,再qt中调用 [复制链接]

上一主题 下一主题
离线chongyong
 

只看楼主 倒序阅读 楼主  发表于: 2018-06-04
如题。在vs中编译动态库,然后在Qt中调用。有没有大神做过类似的。
有几个问题想学习一下:
1)vs中需要做特殊配置吗
2)Qt的版本有没有什么要求
3)显示调用和隐式调用分别有什么优劣。

如上,希望有大佬指点一下,感激不尽。
离线never_forget

只看该作者 1楼 发表于: 2018-06-04
这个你可以试试嘛,都用 C++ 来写一个简单的,然后调用一下,至于跨平台、跨语言就先不管啦~
离线chongyong

只看该作者 2楼 发表于: 2018-06-05
ok了,问题已经解决了。
解决方案如下:
环境:vs2013, Qt Creator 4.5.0  Based on Qt 5.10.0 (MSVC 2015, 32 bit)
一、编译dll。这个就比较简单了,我的系统的64位的,编译dll时要解决方案平台要选择X64。
我编译的dll叫:DllDemo.dll 和 DllDemo.lib

二、在QT中链接:注意这里构建套件要选择 MSVC2013 64bit。保证统一。
1.将dll和头文件拷贝到跟.pro同一目录,(dll和头文件放在一个文件夹中)
2.打开.pro文件,右键添加库->选择外部库,再选择好路径和库名字。.pro文件会多以下内容:
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/dlldemo/ -lDllDemo
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/dlldemo/ -lDllDemod
else:unix: LIBS += -L$$PWD/dlldemo/ -lDllDemo

INCLUDEPATH += $$PWD/dlldemo
DEPENDPATH += $$PWD/dlldemo

注意红色部分,应该把最后的d去掉,因为我们之前生成的dll结尾不是d结尾的。(这是由于自动添加导致的)不改的话会链接不到。
3.main.cpp中包含头文件并使用。
4.注意:要将dll和lib拷贝到生成文件的路径,比如 build-LNNTest-Desktop_Qt_5_10_0_MSVC2013_64bit-Debug\debug
这样才能运行
离线chongyong

只看该作者 3楼 发表于: 2018-06-05
demo.h

#ifndef DEMO_H
#define DEMO_H
#ifdef DEMO_BUILD_DLL
#define DEMO_API __declspec(dllexport)
#else
#define DEMO_API __declspec(dllimport)
#endif

#ifdef __cplusplus
extern "C" {
#endif    /* __cplusplus */
    DEMO_API float sum_d(float x, float y);

#ifdef __cplusplus
}
#endif  /* __cplusplus */

#endif

demo.cpp
#include "demo.h"
float sum_d(float x, float y)
{
    return x + y;
}
离线chongyong

只看该作者 4楼 发表于: 2018-06-05
main.cpp

#include "mainwindow.h"
#include <QApplication>
#include<QDebug>
#include"dlldemo/demo.h"

int main(int argc, char *argv[])
{
    qDebug() << "main() +++ sum_d(2.5, 3.5) = " << sum_d(2.5, 3.5);
    qDebug() << "main() +++ sum_d(3.5, 4.5) = " << sum_d(3.5, 4.5);
    qDebug() << "main() +++ sum_d(4.5, 5.5) = " << sum_d(4.5, 5.5);
    qDebug() << "main() +++ sum_d(5.5, 6.5) = " << sum_d(5.5, 6.5);
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}
离线chongyong

只看该作者 5楼 发表于: 2018-06-05
注意以上均是选用的Debug版本。
快速回复
限100 字节
 
上一个 下一个