VS2013环境下使用QT调用动态链接库实现简单的加法器

首先使用VS2013编写一个DLL文件,其中包括了加法函数,以备调用。具体过程请参照https://blog.csdn.net/langb2014/article/details/48392919

建立动态链接库之后,利用VS2013建立一个QT项目,在Qt Desinger设计如下窗体:

文件QtGuiplusKool.h中的代码如下:

#ifndef QTGUIPLUSKOOL_H_
#define QTGUIPLUSKOOL_H_
#include <QtWidgets/QMainWindow>
#include "ui_QtGuiplusKool.h"

class QtGuiplusKool : public QMainWindow
{
Q_OBJECT

public:
QtGuiplusKool(QWidget *parent = 0);
~QtGuiplusKool();
public slots:
void caculate();
private:
Ui::QtGuiplusKoolClass ui;
};
#endif

文件QtGuiplusKool.cpp中的代码如下:

#include "QtGuiplusKool.h"
#pragma comment(lib,"ourDll.lib")
_declspec(dllimport) double add(double x, double y);

QtGuiplusKool::QtGuiplusKool(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);
connect(ui.pushButton_caculate, SIGNAL(clicked()), this, SLOT(caculate()));
}
QtGuiplusKool::~QtGuiplusKool()
{
}
void QtGuiplusKool::caculate()
{
QString estr1 = "can not devide 0!";
QString estr2 = "please choose caculate option!";
double n1 = ui.lineEdit_input1->text().toDouble();
double n2 = ui.lineEdit_input2->text().toDouble();
int size1 = ui.lineEdit_input1->text().size();
int size2 = ui.lineEdit_input2->text().size();
if (ui.lineEdit_input1->text().size() == 0 || ui.lineEdit_input2->text().size() == 0)
{
ui.textBrowser_out->setText("Plaease Input numbers!");
return;
}
double out = 0;
if (ui.radioButton_plus->isChecked())
{
out = add(n1, n2);
}
else
{
ui.textBrowser_out->setText(estr2);
}
ui.textBrowser_out->setText(QString::number(out, 'f', 10));
}

其中#pragma comment(lib,"ourDll.lib")作用是将静态库outDLL导入工程下,该文件需在工程目录或者其子目录下。

_declspec(dllexport)和_declspec(dllimport):__declspec(dllimport)和__declspec(dllexport)是一对的,在动态链接库中__declspec(dllexport)管导出,__declspec(dllimport)管导出.

_declspec(dllimport)的作用在于:

1.在导入动态链接库中的全局变量方面起作用。可以更好的导出dll中的全局变量。

2._declspec(dllimport)的作用主要体现在导出类的静态成员方面。

3.使用隐式调用dll时,不加_declspec(dllimport)完全可以,只是在生成二进制代码上稍微损失效率。

猜你喜欢

转载自www.cnblogs.com/jiao19910106/p/9239919.html