1. 程式人生 > >QT 呼叫動態庫介面方法

QT 呼叫動態庫介面方法

我們在做大型專案的時候,經常會遇到好多重複或常用的部分,如果每次都重新編寫固然是可以的,不過那樣會大大降低工作效率,並且影響程式碼的可讀性,更不利於後期的程式碼維護。我們可以把他們製作成相應的功能函式,比如動態庫,這樣還可以對專案進行分工,加快專案的進度。下面就是qt 呼叫動態庫介面的方法。

首先編譯一個簡單的動態庫介面檔案Test.dll
新建一個普通的qt專案,程式碼如下:

#include "testdll.h"

#include <QLibrary>
#include <QDebug>
QString DLL_NAME = "Test.dll";      //庫檔名
QString DLL_PATH = "./bin/"; //庫檔案路徑 typedef int (*jk_TEST_A)();//根據動態庫介面函式返回值型別定義一個型別 typedef int (*jk_TEST_B)();//該dll介面的返回值全為int typedef int (*jk_TEST_C)(); typedef int (*jk_TEST_D)(); jk_TEST_A TEST_A; //根據型別定義自己呼叫的函式名 jk_TEST_B TEST_B; jk_TEST_C TEST_C; jk_TEST_D TEST_D; TestDll::TestDll(QWidget *parent) : QWidget(parent), ui(new
Ui::TestDll) { ui->setupUi(this); this->loadLibrary(); qDebug() << TEST_A() << endl; qDebug() << TEST_B() << endl; qDebug() << TEST_C() << endl; qDebug() << TEST_D() << endl; } TestDll::~TestDll() { delete ui; } bool
TestDll::loadLibrary() { //將庫介面與自己定義的呼叫介面名關聯起來 //前面的為自己要呼叫的函式名 //括號裡的為動態庫的介面名 QLibrary myLib(DLL_PATH + DLL_NAME); TEST_A = (jk_TEST_A)myLib.resolve("TEST_A"); TEST_B = (jk_TEST_B)myLib.resolve("TEST_B"); TEST_C = (jk_TEST_C)myLib.resolve("TEST_C"); TEST_D = (jk_TEST_D)myLib.resolve("TEST_D"); return myLib.isLoaded(); }

介面函式

這裡寫圖片描述

結果

這裡寫圖片描述

完美呼叫

注:Test.dll 放在在exe目錄下的 bin目錄下

Test.dll 是 vc++ 編譯的,具體編譯方法請看下一條