Qt中純C 專案發布為dll的方法(超詳細步驟)

2022-10-10 09:15:12 字數 1687 閱讀 6880

目錄眾所周知,我們可以將c++專案中的類以及函式匯出,形成 .dll 檔案,以供其他程式使用,下面將說明qt環境下的使用方法。

首先建立共享庫,步驟如下:

下一步會出現類對話方塊等等,不用管它,直接點選建立即可,稍後再將類都刪了。

建立好以後你會發現有乙個包含global的標頭檔案,這個檔案中定義了__declspec(dllexport)、__declspec(dllimport)等,也可以刪掉(如果要按照下面的方法的話,刪掉即可)。

接下來還有重要的一步,請在.pro檔案中,加入

config += dll //即使你的**中寫成了 config += staticlib,也要改過來

接下來就開始我們具體的的建立方法吧!

按照匯出dll的的操作劃分,有兩種模式:

首先是標頭檔案內容:

標頭檔案:

在方法宣告時,前面加上__declspec(dllimport),也可用#define定義,看**:

//為了和將來用到的程式中公用乙個標頭檔案,建立dll時用到的是__declspec(dllexport),而使用dll時用到__declspec(dllimport),完全可以各自寫一下

#define testdllshared_export __declspec(dllexport)

#ifdef testdllshared_export

#else

#define testdllshared_export __declspec(dllimport)

#endif

//下面我要定義4個普通函式:

testdllshared_export int test1();

testdllshared_export int test2(void);

testdllshared_export int test3(int a);

testdllshared_export int test4(int a,int b);

然後在對應的cpp原始檔中實現test1、test2、test3、test4這幾個方法(為了簡單,我只輸出了一句話):

.cpp原始檔:

//記得加上上面的標頭檔案

//記得加上iostream標頭檔案,不然cout不能用

int test1()

以上就是普通函式建立.dll和使用.dll的方法,看起來動態呼叫是不是很麻煩?但它有許多優點(請自查),而且據說這裡的函式名可以利用.def檔案實現不改變名稱,省去好多麻煩,但是我嘗試了各種方法,如在.pro中利用def_file新增.def檔案還是不行55555,會的可以留言哦!

對於類的話,建立時:在class的後面,類名的前面加上定義的__declspec(dllexport);使用時,換成__declspec(dllimport),也可以參照前面的#define條件定義法。舉例:

#define hptickdllshared_export __declspec(dllexport)

#ifdef hptickdllshared_export

#else

#define hptickdllshared_export __declspec(dllimport)

#endif

class hptickdllshared_export hptickdll //我在這裡定義了類hptickdll

;靜態呼叫的方法和普通函式一樣,直接可以使用類及其成員函式(別忘了新增標頭檔案),就不細說了。

Qt中純C 專案發布為dll的方法(超詳細步驟)

目錄 眾所周知,我們可以將c 專案中的類以及函式匯出,形成 dll 檔案,以供其他程式使用,下面將說明qt環境下的使用方法。首先建立共享庫,步驟如下 下一步會出現類對話方塊等等,不用管它,直接點選建立即可,稍後再將類都刪了。建立好以後你會發現有乙個包含global的標頭檔案,這個檔案中定義了 dec...

C 反射呼叫dll中的方法

反射提供描述程式集 模組和型別的物件 type 型別 可以使用反射動態地建立型別的例項,將型別繫結到現有物件,或從現有物件中獲取型別,然後呼叫其方法或訪問器字段和屬性。如果 中使用了特性,可以利用反射來訪問它們 namespace assembly name public string assemb...

C 反射動態呼叫dll中的方法,並返回結果

最近在看工廠開發模式,發現用到了反射,之前只聽說過也沒怎麼用過 所以花了點時間重新溫習了一遍 反射的作用是動態的載入某個dll 程式集 並執行該程式集中的某個方法,並返回結果 當然也可以給該方法傳遞引數 直接上 namespace assembly name 上邊寫乙個測試類,命名空間是assemb...