C 介面封裝

2021-08-18 21:46:52 字數 2300 閱讀 9249

在產品開發過程中,我們經常會需要對外提供dll的介面,這種介面可以在產品開是設計好的,也可能是在基本功能開發完成進行封裝的,這裡將介紹一種比較基本常用的封裝方法,供初學者參考。歡迎提出好的改進方式。

先提幾點要求,包含我們的目標、要求和本文範圍等,

首先你可以先配置好你想發布的目錄資料夾,

例如:包含三個對外發布的資料夾,名稱分別為bin、include、lib,bin裡放發布所需要的dll,include只存放發布的標頭檔案,lib資料夾裡放生成的lib檔案

你的實現的工程檔案放在工程資料夾裡就可以了

//---------------------介面檔案 imydll.h ------  //這個檔案應該放在對外發布的include檔案下,供外部使用

// 這個是對外發布的介面,這個檔案裡只包含對外提供的方法,不會包含私有方法和屬性

class imydll        // 這個類是對外發布的,所有方法均是純虛的,不會暴露實現

//-------------------實現檔案 mydllimpl.h --------

//繼承imydll

#include "imydll.h"  // 這個是具體實現的類,放在工程檔案目錄下就可以了,不需要對外發布

class cmydllimpl : public imydll   // 從對外介面類繼承,負責具體實現

//-----------------實現檔案 mydllimpl.cpp -------- // 這個是方法實現檔案,沒有什麼好說的,放在工程目錄下

#include "mydllimpl.h"

void cmydllimpl::init() 

上面的就是整個封裝的框架,下面是最重要的一步,提供使用者建立物件的方法,因為前面對外發布的為抽象類,使用者不能建立例項,所以:

// mydllfactory.h // 對外發布

#include "imydll.h"

class mydllfactory

// mydllfactory.cpp

#include "mydllfactory.h"

#include "mydllimpl.h"   // 注意這個很重要,由於是在cpp裡,

imydll* mydllfactory::create()

mydllfactory類也可以寫到對外介面的標頭檔案中,因為這裡只有1個方法,可以減少維護的檔案資料,我經常把它和介面標頭檔案寫在一起。

物件的建立方法可能會有很多,可以根據實現情況進行修改,比如使用工廠模式、物件工廠等方法。

這樣封裝過程就完了,提供給使用者的是mydllfactory.h、imydll.h、dll檔案和lib檔案

對外提供的檔案中看不到任何多餘的東西,使用者呼叫的過程大概是這樣的:

#include "mydllfactory.h"

void f()

提供介面,函式引數除了原生型別,其它的全部傳指標。不要對外暴露鎖,盡量不要讓呼叫者手工分配記憶體。所有的陣列必須帶長度。所有的函式呼叫應該有返回值,所有的錯誤有清晰的描述。windows下儲存好pdb。介面中必須有乙個查詢版本號的介面。不對歷史介面做擴充套件,而是新增新介面。最後就是寫乙個介面手冊。

提供api從使用者的角度來講,不要讓api變來變去,可以增加新的api,並做好版本控制或則呼叫時版本的驗證檢查

用開發者的角度來說,盡量能讓程式自動識別不同的平台差異,如大小端、位元組對齊等,並且避免使用依賴於平台的一些庫

api的引數可以使用指標及結構體,便於以後引數擴充套件,並且引數傳遞效率也比較高。

資料型別在不同的平台上可能會出現長度不一致,所以你需要處理這種情況,至於記憶體管理,就需要誰申請的就讓誰釋放,如果你的介面內部申請了記憶體供外部使用那麼一定要提供介面讓外部呼叫去釋放記憶體(因為記憶體管理的庫會存在差異)

介面: 介面描述了類的行為和功能,而不需要完成類的特定實現。

c++ 介面是使用抽象類來實現的,抽象類與資料抽象互不混淆,資料抽象是乙個把實現細節與相關的資料分離開的概念。

如果類中至少有乙個函式被宣告為純虛函式,則這個類就是抽象類。純虛函式是通過在宣告中使用 "= 0" 來指定的,如下所示:

class

box;

設計抽象類(通常稱為 abc)的目的,是為了給其他類提供乙個可以繼承的適當的基類。抽象類不能被用於例項化物件,它只能作為介面使用。如果試圖例項化乙個抽象類的物件,會導致編譯錯誤。因此,如果乙個 abc 的子類需要被例項化,則必須實現每個虛函式,這也意味著 c++ 支援使用 abc 宣告介面。如果沒有在派生類中過載純虛函式,就嘗試例項化該類的物件,會導致編譯錯誤。

將C 介面封裝成C函式

在某些情況下,需要將c 的介面封裝成c函式。首先,我們準備乙個c 的so檔案,它由以下h和cpp檔案生成 chengyi localhost cytest cat cy test.h class a public a virtual a int gt int pt private int s che...

Http介面封裝Mqtt協議 C

icache icache 是客戶端連線成功時觸發的事件 mqttclient.connected connected 是客戶端斷開連線時觸發的事件 mqttclient.disconnected disconnected 連線伺服器 mqttclient.connectasync options ...

封裝API介面

封裝api介面 目的 為了以後修改介面方便,如果專案很大,在每乙個頁面裡修改介面的話,很麻煩,所以封裝在乙個檔案裡,找起來也很方便 如何封裝 1.在src下建乙個restful資料夾,在此下面建乙個api.js檔案 2.因為上面的介面位址寫的是 api 所以要在config資料夾下的index.js...