QHotkey
QlistWidget QTableWidget 窗口置顶 QCefView EXCEL Jieba分词 剪切板 Mysql QTableView QRegularExpression正则 JQHttpServer POST 匹配TDK unicode转中文 eventFilter dr_url与dr_member_url 缓存 URI地址 数据库操作 系统目录常量 模板标签 QSpinBox Quick QCompress压缩 QLibrary QMap QVariant QNetworkAccessManager Qchart QFile Qjson QJSEngine QFileDialog对话框 QSet QTimer时钟


动态加载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;
}