动态加载DLL:
#include <QMessageBox> #include "../MainFunc/MainFunc.h" #include <QLibrary> #include <QDebug> typedef MainFunc* (*getObj)(); typedef char* (*dllText)(); typedef int (*dllPrintInt)(); void QtVS2015::slotTest() { QLibrary* mainFunDll = new QLibrary("MainFunc.dll"); if (mainFunDll->load()) { getObj obj = (getObj)mainFunDll->resolve("getDllObj"); MainFunc* mF = obj(); mF->printMsg(QStringLiteral("这是一个DLL调用程序")); qDebug()<<mF->add(4, 7); dllText dText = (dllText)mainFunDll->resolve("text"); qDebug() << QString::fromLocal8Bit(dText()); dllPrintInt dPrintInt = (dllPrintInt)mainFunDll->resolve("printInt"); qDebug() << dPrintInt(); } else { QMessageBox* msgBox = new QMessageBox; msgBox->setText(QStringLiteral("动态库加载失败!")); msgBox->setWindowTitle(QStringLiteral("信息框")); msgBox->show(); } }
创建DLL:
头文件:
#pragma once #include "mainfunc_global.h" #include <string> class MAINFUNC_EXPORT MainFunc { public: MainFunc(); virtual int add(int a,int b); virtual void printMsg(QString msg); }; extern "C" {//一定要添加上 MAINFUNC_EXPORT MainFunc* getDllObj(); MAINFUNC_EXPORT char* text(); MAINFUNC_EXPORT int printInt(); }
cpp文件:
#include "MainFunc.h" #include <QMessageBox> MainFunc::MainFunc() { } int MainFunc::add(int a, int b) { return a + b; } void MainFunc::printMsg(QString msg) { QMessageBox* msgBox = new QMessageBox; msgBox->setText(msg); msgBox->setWindowTitle(QStringLiteral("信息框")); msgBox->show(); } MAINFUNC_EXPORT MainFunc* getDllObj() { return new MainFunc; } MAINFUNC_EXPORT char* text() { return "Hello World 2019!"; } MAINFUNC_EXPORT int printInt() { return 2019; }