之前做过的一个项目需要把.c文件转换成dll文件,今天抽出时间总结一下,
一、首先打开Qt Creator 新建库项目
1、新建---> 库-->C++库
2、类型选择为共享库,在此我输入的名称为sld 点击下一步
3、选择自己的项目所需要的包含的模块。(这个很重要) 点击完成
4、在 .pro文件中添加上
DESTDIR =..\MyDebug
它的意思是我们把生成的内容放到MyDebug这个文件夹里,如果没有它会自动生成。点击项目把Shadowbuild 去掉勾选
把sld.h修改成如下
/*******************************************SLD.H******************************************************/
#ifndef SLD_H
#define SLD_H
#include "sld_global.h"
#include <QString>
class SLDSHARED_EXPORT Sld
{
public:
Sld();
QString GetStr();
};
#endif
/*****************************************SLD.CPP***********************************************/
#include "sld.h"
#include <QDebug>
Sld::Sld()
{
qDebug()<<" ";
}
QString Sld::GetStr()
{
return "aa";
}
我们再新添加一个窗体供测试用
我给命名为MyDialog
/***********************************************把.h文件修改成*******************************/
#ifndef MYDIALOG_H
#define MYDIALOG_H
#include <QDialog>
#include "sld_global.h"
namespace Ui {
class MyDialog;
}
class SLDSHARED_EXPORT MyDialog : publicQDialog
{
Q_OBJECT
public:
explicit MyDialog(QWidget *parent = 0);
~MyDialog();
private:
Ui::MyDialog *ui;
};
#endif // MYDIALOG_H
/*********************************************,cpp******************************/
#include "mydialog.h"
#include "ui_mydialog.h"
MyDialog::MyDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::MyDialog)
{
ui->setupUi(this);
}
MyDialog::~MyDialog()
{
delete ui;
}
这里什么也没做只是把SLDSHARED_EXPORT加上了
好了就这样,我们构建一下就会在MyDebug文件夹里生成我们的dll
二、接下来是使用动态链接库
新建一个Qt WidgetsApplication项目
在pro 文件里添加
DESTDIR =..\MyDebug
INCLUDEPATH +=../sld
LIBS += ../MyDebug/sld.dll
再点击项目把shadow build 去掉
第二句是把sld项目的文件夹包含到这个项目里来,这样我们就能直接用它里面的头文件了。
第三句是告诉编译器lib在哪
这样我在窗体上加一个按钮并添加槽
/**********************************************H****************************************************/
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void on_pushButton_clicked();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
/**************************************************.cpp*******************************************************************/
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "sld.h"
#include <QMessageBox>
#include "mydialog.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
MyDialog * my =new MyDialog(this);
my->show();
QMessageBox * msg=new QMessageBox(this);
Sld s;
msg->setText(s.GetStr());
msg->show();
}