真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

跨模塊接口與動態(tài)庫

模塊

首先定義下模塊的概念,在C++中可以認(rèn)為每個(gè)二進(jìn)制文件為一個(gè)模塊。比如一個(gè)exe可執(zhí)行程序、一個(gè)dll或so動態(tài)庫。通常來說一個(gè)exe會依賴于幾個(gè)dll動態(tài)庫。
我們寫一個(gè)帶界面的聊天程序,exe為入口主程序 是主模塊,它可能依賴于QtWidgets QtCore等Qt模塊、libevent第三方模塊、我們自己寫的基礎(chǔ)庫xxbase模塊。

創(chuàng)新互聯(lián)建站2013年開創(chuàng)至今,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站、成都外貿(mào)網(wǎng)站建設(shè)公司網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢想脫穎而出為使命,1280元定安做網(wǎng)站,已為上家服務(wù),為定安各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:13518219792

接口/跨模塊接口

模塊自己內(nèi)部調(diào)用比較簡單,因?yàn)榫幾g環(huán)境和平臺都一致,不存在不兼容的問題。如果想把我們的功能提供給其他人使用,就需要導(dǎo)出接口和dll二進(jìn)制文件了。每種語言有自己的接口定義形式,接口在C或C++里就是一些.h頭文件。頭文件里定義了結(jié)構(gòu)體、函數(shù)等,供其他模塊調(diào)用。

也可以認(rèn)為模塊由接口和二進(jìn)制文件組成。windows編譯出來的dll肯定不能在linux上調(diào)用、32位編譯出的dll又不能被64位程序調(diào)用、Debug模式和Release模式也存在很多差異。C++不像Java,Java是編譯一次在任意操作系統(tǒng)和平臺都能跑起來。C++呢?不同操作系統(tǒng)、不同CPU、不同系統(tǒng)位數(shù)、甚至不同優(yōu)化參數(shù),編譯出來的二進(jìn)制文件都不通用。

動態(tài)庫

動態(tài)庫就是編譯好的、可供其他模塊調(diào)用的二進(jìn)制文件。在windows是dll形式,在類Unix是so形式。

動態(tài)庫相比源碼和靜態(tài)庫有以下優(yōu)勢:

  • 若以源碼或靜態(tài)庫方式提供給別人用,如果后期有一個(gè)bug需要修改,那么所有調(diào)用者都需要重新編譯、測試、打包發(fā)布,成本很高。
  • 以動態(tài)庫方式提供,使用者只需要替換dll或so即可,簡單高效。

動態(tài)庫的劣勢:

  • 動態(tài)庫版本維護(hù)比較麻煩,得思考下如何避免“dll地獄”。

跨模塊接口編寫規(guī)范

  • 跨平臺的接口應(yīng)該使用C++11新統(tǒng)一的數(shù)據(jù)類型,比如int32_t int64_t等。因?yàn)樵碱愋驮诓煌脚_編譯器可能位數(shù)不同,比如long有的是32位、有的是64位。
  • 不能使用STL標(biāo)準(zhǔn)庫里的vector、list等作為函數(shù)參數(shù)。因?yàn)槟K提供者和使用者可能使用不同的C++編譯器,STL實(shí)現(xiàn)方式不一樣。
  • 只能傳遞裸指針作為函數(shù)參數(shù),不能使用智能指針。因?yàn)椴淮_定調(diào)用者是否支持智能指針、智能指針實(shí)現(xiàn)方式是否一樣。
  • 接口一經(jīng)發(fā)布,不允許做任何修改(.h不能改、只允許改.cpp發(fā)布dll更新版本)。因?yàn)樾薷慕涌诤笏惺褂谜叨家匦戮幾g,即使用不到新增的功能。

“接口一經(jīng)發(fā)布,不允許做任何修改”這聽上去很難,其實(shí)是有辦法解決的。我們可以參考COM的思想,提供一個(gè)QueryInterface函數(shù),用以查詢所有接口。調(diào)用者先判斷這個(gè)接口是否存在,存在則調(diào)用、不存在則給出錯(cuò)誤提示。如果后期需要增加新接口,只需要更改下QueryInterface內(nèi)部實(shí)現(xiàn),就能擴(kuò)展新接口。

即使把現(xiàn)在所有能想到的功能都抽象成接口,也免不了后期增加新功能??梢蕴崆邦A(yù)留一些字段、函數(shù),或者設(shè)計(jì)成方便擴(kuò)展的形式。


文章題目:跨模塊接口與動態(tài)庫
URL鏈接:http://weahome.cn/article/dsoihcd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部