QT動態載入DLL包括載入DLL中的類及其成員函式

2021-09-08 09:04:54 字數 1191 閱讀 3733

qt中載入dll的方式有兩種:

一種是靜態方式的載入,需要有兩個檔案:lib檔案和dll檔案。lib檔案就是導入庫,裡面定義了一些函式符號,在呼叫的時候會直接查詢這些函式符號,然後根據這些函式符號,找到dll對應的模組載入進來進行呼叫。

另一種就是動態呼叫。在使用的時候才會載入dll進來,使用qt本身自己的載入機制,利用qlibrary進行動態載入。

靜態載入的方式比較常用,下面介紹一下動態載入的方式:

在需要匯出的函式上一定要新增上extern 「c」,編譯器在生成dll的時候,就會自動的按照c語言的編譯方式進行編譯,只會編譯出函式名,而不會編譯上引數型別。

#include "mainfunc.h"

#include mainfunc::mainfunc()

int mainfunc::add(int a, int b)

void mainfunc::printmsg(qstring msg)

mainfunc_export mainfunc* getdllobj()

mainfunc_export char* text()

mainfunc_export int printint()

編譯一下就可以生成dll和相應的lib檔案。

宣告函式指標:

#include #include "../mainfunc/mainfunc.h"

#include #include typedef mainfunc* (*getobj)();

typedef char* (*dlltext)();

typedef int (*dllprintint)();

具體呼叫過程:

void qtvs2015::slottest()  else 

}

執行一下就可以了!

aaa

動態載入dll

利用反射進行動態載入和呼叫.assemblyass assembly.loadfrom dllpath 利用dll的路徑載入 載入dll後,需要使用dll中某類.type type ass.gettype typename 利用型別的命名空間和名稱獲得型別 需要例項化型別,才可以使用,引數可以人為的...

靜態載入dll和動態載入dll

一,首先編寫dll 建win32空dll工程 標頭檔案.h extern c declspec dllexport int max int a,int b extern c 解決函式名由於不同編譯器造成的名字匹配問題,通常c 編譯器編譯時會對函式進行改名,而c編譯器不會 extern c decls...

靜態載入dll和動態載入dll

一,首先編寫dll 建win32空dll工程 標頭檔案.h extern c declspec dllexport int max int a,int b extern c 解決函式名由於不同編譯器造成的名字匹配問題,通常c 編譯器編譯時會對函式進行改名,而c編譯器不會 extern c decls...