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(); } }
|
版权声明: 此文章版权归snailgoers所有,如有转载,请注明來自原作者