标签:style blog color ar 使用 sp 文件 div 问题
连接库分为2种
////////////////////////////////// MFCDLL.h ///////////////////////////////////// #ifndef _MFCDLL_H #define _MFCDLL_H #ifdef __cplusplus extern "C" { #endif #ifdef DLL // do nothing #else #define DLL __declspec(dllimport) #endif DLL void hello(); DLL int add(int a, int b); #ifdef __cplusplus } #endif #endif
////////////////////////////////// MFCDLL.cpp ///////////////////////////////////// #define DLL __declspec(dllexport) #include "MFCDLL.h" #include <windows.h> void hello() { ::MessageBox(NULL, "hello world!", "greeting", MB_OK); } int add(int a, int b) { return a + b; }
【使用QT生成DLL】使用QT建立动态库工程,编译即可得到DLL(无LIB文件)
////////////////////////////////// qtdll_global.h ////////////////////////////// #ifndef QTDLL_GLOBAL_H #define QTDLL_GLOBAL_H #include #if defined(QTDLL_LIBRARY) # define QTDLLSHARED_EXPORT Q_DECL_EXPORT #else # define QTDLLSHARED_EXPORT Q_DECL_IMPORT #endif #endif // QTDLL_GLOBAL_H
////////////////////////////////// qtdll.h ///////////////////////////////////// #ifndef QTDLL_H #define QTDLL_H #include "qtdll_global.h" class QTDLLSHARED_EXPORT QTDLL { public: QTDLL(); public: int add(int a, int b); }; #endif // QTDLL_H
////////////////////////////////// qtdll.cpp /////////////////////////////////// #include "qtdll.h" QTDLL::QTDLL() { } int QTDLL::add(int a, int b) { return a + b; }
【QT显式加载VC生成的DLL】
#include "mainwindow.h" #include "ui_mainwindow.h" #include <QLibrary> #include <QDebug> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); // DLL显式加载,只需要DLL文件即可,不需要.H和.LIB文件 // 需要将DLL放到可执行目录中 typedef void(*FUN1)(); typedef int(*FUN2)(int, int); QLibrary lib("MFCDLL.dll"); if (lib.load()) { qDebug() << "load ok!"; FUN1 hello = (FUN1)lib.resolve("hello"); FUN2 add = (FUN2)lib.resolve("add"); if (hello) { qDebug() << "load hello ok!"; hello(); } if (add) { qDebug() << "load add ok!"; qDebug() << add(3, 5); } } else { qDebug() << "load error!"; } }
【QT隐式加载VC生成的DLL】
#include "mainwindow.h" #include "ui_mainwindow.h" #include "lib/MFCDLL.h" #include <QDebug> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); // DLL隐式加载,只需要.DLL .H和.LIB文件 // 1需要将DLL放到可执行目录中 // 2将LIB路径设置到项目PRO文件中 // 3将头文件包含进来,如果不包含需要自已声明函数原型及来源(本质与包含头文件相同) hello(); qDebug() << add(5, 6); qDebug() << "ok"; }
pro工程文件中要设置LIB文件路径
# lib文件路径 LIBS += "F:/lib/MFC_DLL_TEST_WITH_QT_2/lib/MFCDLL.lib"
【QT使用QT生成的动态库,隐式】
#include "mainwindow.h" #include "ui_mainwindow.h" #include <QDebug> #include "lib/qtdll.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); // QT使用QT生成的DLL // 1. 包含头文件 // 2. 在工程文件中指定lib路径 // 3. 将动态库拷贝到可执行文件目录 QTDLL dll; qDebug() << dll.add(3, 5); }
pro工程文件中的设置
LIBS += "F:/lib/QT_DLL_TEST_WITH_DLL/lib/QTDLL.dll"
标签:style blog color ar 使用 sp 文件 div 问题
原文地址:http://www.cnblogs.com/Y1Focus/p/4047555.html