在最近的開發中需要做了demo,來驗證公司的老項目能否在Qt上做重新開發;於是碰到的第一個問題那就是dll文件如何加載了;網上查閱了很多資料,記錄一下已成功加載dll文件的方法,以防遺忘。
下面是我在VS編譯器上寫的一個簡單的dll文件,關於dll文件如何編寫,我就不再贅述了。
.h文件
#ifndef _MYDLL_H #define _MYDLL_H #ifdef MYDLL_EXPORTS #define MYDLL_API __declspec(dllexport) #else #define MYDLL_API __declspec(dllimport) #endif extern "C" MYDLL_API int add(int a, int b); #endif
.cpp文件
#include "mydll.h" extern "C" MYDLL_API int add(int a, int b) { return (a + b); }
編譯成功后,會得到下面三個文件,mydll.h、MyDll.lib、MyDll.dll
然后打開Qt創建一個項目;我是把這三個文件全部拷貝到了運行工作目錄;如下所示:

下面介紹一下Qt如何隱式調用dll文件:
打開.Pro文件

在工程文件中包含.h文件的路徑以及庫文件的路徑即可,下面就是如何調用庫文件中的函數了:
#include <QDebug> #include <QLibrary> #include "mydll.h" //包含頭文件 int main() { qDebug() << add(10, 20); return 0; }
上述是隱式調用庫文件的函數,還有一種顯示調用方法,如下所示:
#include <QDebug> #include <QLibrary> #include "mydll.h" //包含頭文件 typedef int(*pFun)(int, int); int main() { QLibrary mydll("MyDll.dll"); if(!mydll.load()) { qDebug() << "load dll error"; } else { qDebug() << "load dll success"; pFun myAdd = (pFun)mydll.resolve("add"); if(myAdd){ qDebug() << myAdd(1, 10); } else { qDebug() << "get Function address error"; } } if(mydll.isLoaded()) { mydll.unload(); } return 0; }
相較而言,隱式調用比顯示調用更加簡潔,通常都是選擇隱式調用更為合適。
當然,在配置庫文件的路徑時,也可以選擇用相對路徑的方式,如下所示:

