DLL导出定义 Common_Global.h

1
2
3
4
5
6
7

#if defined(COMMON_LIBRARY)
# define COMMON_EXPORT Q_DECL_EXPORT
#else
# define COMMON_EXPORT Q_DECL_IMPORT
#endif

定义接口 IGrr.h

1
2
3
4
5
6
7
8
9
10
11

#pragma once
#include "../Common/Common_global.h"

class QDetectObj;
class COMMON_EXPORT IGRR
{
public:
virtual void Show() = 0;
};

##定义界面导出类QGrrUI.h

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

#include <QObject>
#include "IGrr.h"
#include "GRR.h"


class COMMON_EXPORT QGrrUI : public IGRR
{
public:
QGrrUI();
~QGrrUI();
virtual void Show()override;

private:
GRR* m_pGrr;
};

extern "C" {
COMMON_EXPORT QGrrUI* getObj();
}

定义界面导出类QGrrUI.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

QGrrUI::QGrrUI()
{
m_pGrr = new GRR();
}

QGrrUI::~QGrrUI()
{
}

void QGrrUI::Show()
{
m_pGrr->show();
}

COMMON_EXPORT QGrrUI* getObj()
{
return new QGrrUI;
}

同时设置DLL工程的预编译添加“COMMON_LIBRARY”

调用方

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

#include "IGRR.h"
typedef IGRR* (*getGrrObj)();

class Users{
private:
IGRR *m_PGrr;
}

void QStateWidget::onDataAnalyze()
{
QString dllName = QApplication::applicationDirPath() + "/GRR.dll";
QLibrary* draw = new QLibrary(dllName);
if (draw->load()) {
getGrrObj drawObj = (getGrrObj)draw->resolve("getObj");
IGRR* obj = drawObj();
obj->Show();
}
}