如果動態使用平台提供的API

2021-04-09 10:56:06 字數 900 閱讀 7730

開發工具的安裝目錄下會有include,lib目錄,這兩個目錄下存放著os提供的api的宣告以及經過封裝的一些類以方便程式設計師開發,封裝的類提供的服務大多通過呼叫os的api來實現,而真正提供os的api實現的卻在乙個個dll中。我們想要使用這些api或經過封裝的類的服務時,一般做法如下:

//test.cpp

#include

#param comment (lib, "***.lib")

//呼叫api或使用乙個經過封裝的類

使用了以上方式開發的程式不能保證在任何系統下都能正常工作,因為在執行這個程式的時候,系統會動態載入系統用到的各個dll,程式依賴的這些dll不一定都存在於系統中,例如gdiplus.dll在2000下預設是沒有的,當載入失敗的時候,程式可能就會有問題了。

一種解決方案是:在程式的安裝包裡帶上程式依賴的dll,但是這樣會帶來安裝包的增大。

另一種解決方案是:如果你能允許失去一些該dll提供的api時,那麼可以考慮下面介紹的方案。

(1)去掉 #param comment (lib, "***.lib")

(2)封裝api

假設你使用了 void apifunc1();那麼你自己提供乙個void apifunc1();函式

該函式的實現如下:

void apifunc1()

loadlibrary("***.dll");

如果載入失敗,或直接返回或自己實現乙個簡化的版本;

如果載入成功,那麼呼叫真正的api

(3)開發工具提供的一些經過封裝的類提供的一些方法是直接呼叫api的,我們也更改這種方式。但是這些經過封裝的類大多在include目錄裡,這個目錄裡的檔案我們不能隨便更改,那麼怎麼辦呢?我們還是只需要按照2的方法來做即可。編譯器在鏈結api時,由於發現我們程式裡就有這個函式的實現,它就把我們自己的程式鏈結進去了。

個推平台API使用經驗

實現推送功能的方案有許多,具體可以看 程式設計師 的一篇文章這裡也詳解了ios與android接受推送的機制不同。本文主要講的是利用第三方平台來開發個推功能的api,使用的個推平台 設計 類 loginuserpojo 使用者類 notificationpojo 通知類 屬性見資料庫設計資訊表 資料...

c 跨平台技術學習 三 使用標準API

posix.1 api定義了大量的函式,在各方面的功能都很豐富,下面對其進行介紹 它是乙份描述了at t unix system v作業系統的文件,與posix.1保持一致,是它的乙個超集。svid由基礎系統和擴充套件定義,它只定義了c程式設計介面,沒有定義任何使用者級別的命令,基礎系統更進一步細分...

使用gmodule 跨平台動態載入庫

使用gmodule 跨平台動態載入庫 the function signature for say hello typedef void sayhellofunc const char message gboolean just say hello const char filename,gerro...