這篇文章主要講解了“C++類包含函數(shù)有哪些”,文中的講解內(nèi)容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“C++類包含函數(shù)有哪些”吧!
成都一家集口碑和實力的網(wǎng)站建設服務商,擁有專業(yè)的企業(yè)建站團隊和靠譜的建站技術(shù),十多年企業(yè)及個人網(wǎng)站建設經(jīng)驗 ,為成都近千家客戶提供網(wǎng)頁設計制作,網(wǎng)站開發(fā),企業(yè)網(wǎng)站制作建設等服務,包括成都營銷型網(wǎng)站建設,成都品牌網(wǎng)站建設,同時也為不同行業(yè)的客戶提供成都網(wǎng)站設計、網(wǎng)站建設、外貿(mào)網(wǎng)站建設的服務,包括成都電商型網(wǎng)站制作建設,裝修行業(yè)網(wǎng)站制作建設,傳統(tǒng)機械行業(yè)網(wǎng)站建設,傳統(tǒng)農(nóng)業(yè)行業(yè)網(wǎng)站制作建設。在成都做網(wǎng)站,選網(wǎng)站制作建設服務商就選創(chuàng)新互聯(lián)建站。
C++類包含三個我們關(guān)心的函數(shù):構(gòu)造函數(shù),析構(gòu)函數(shù),和所有重要的 DoSomething 函數(shù),我們需要把每一個函數(shù)包裹成與其等價的C++函數(shù),在這里拿出來和大家分享一下。
// original class class CFoo { public: CFoo(int x); ~CFoo(); int DoSomething(int y); }; // flattened C code void* __stdcall new_CFoo(int x) { return new CFoo(x); } int __stdcall CFoo_DoSomething(void* handle, int y) { CFoo *foo = reinterpret_cast<CFoo *>(handle); return foo->DoSomething(y); } void __stdcall delete_CFoo(void *handle) { CFoo *foo = reinterpret_cast<CFoo *>(handle); delete foo; }
這里有幾個比較重要的地方要注意。首先,注意每一個C++類被映射為一個簡單的 C 函數(shù)。其次,觀察到我們?yōu)?C 函數(shù)明確地使用 __stdcall 調(diào)用習慣。在前一篇 DLL 文章里,我們知道簡單的調(diào)用在 MSVC DLL 里的無格式 C 函數(shù),真是很麻煩。
如果我們放棄越過種種艱難困苦去用它,我們可以使這個努力稍微容易一點。讓 Borland 調(diào)用 Microsoft DLL 最簡單的辦法是 DLL 導出無格式,無修飾,__stdcall 調(diào)用習慣的 C++函數(shù)。Borland 和 Microsoft 對 __cdecl 函數(shù)的處理上是不同的。
通常,他們對 __stdcall 函數(shù)也不同,因為 MSVC 修飾 __stdcall 函數(shù),但我們可以通過添加一個 DEF 文件到 MSVC 工程里來阻止這種行為。參見下載部分的例子有 DEF 文件的例子。其它關(guān)于代碼要注意的事情是 new_CFoo 函數(shù)返回一個指向 CFoo 對象的指針。BCB 調(diào)用者必須在本地保存這個指針。這可能看起來和這篇文章的主題有點矛盾。
畢竟,我想 BCB 不能使用來自 MSVC DLL 的 C++類?如果那是正確的,那么為什么我們還要返回一個 CFoo 對象指針呢?答案是 BCB 不能調(diào)用 MSVC DLL 導出類的成員函數(shù)。但是,這并不意味著它不能存儲這樣對象的地址。new_CFoo 返回的是一個 CFoo 對象的指針。
BCB 客戶端可以存儲這個指針,但不能用。BCB 不能廢棄它(不應當嘗試這么做)。讓這個觀點更容易理解一點,new_CFoo 返回一個空指針(總之它不能返回別的什么東西)。在 BCB 這邊,除了存儲它,然后把它傳回給 DLL,沒有什么可以安全地處理這個空指針的方法。
Ok,在我們繼續(xù)前進之前,還有另外兩個要十分注意的地方。首先,注意 CFoo_DoSomething 把空指針作為它的***個參數(shù)這個空指針與 new_CFoo 返回的是同一個空指針。空指針用 reinterpret_cast 被追溯到 CFoo 對象(你知道,當你看到一個 reinterpret_cast 的時候。
你正在處理是難看的代碼)。DoSomething 成員函數(shù)在轉(zhuǎn)換之后被調(diào)用。***注意空指針也是C++類的參數(shù)。包裝 DLL 刪除對象是至關(guān)緊要的。你不應當在 BCB 里對空指針調(diào)用 delete。顯然它不會按你想的去做。
感謝各位的閱讀,以上就是“C++類包含函數(shù)有哪些”的內(nèi)容了,經(jīng)過本文的學習后,相信大家對C++類包含函數(shù)有哪些這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!
分享名稱:C++類包含函數(shù)有哪些
文章鏈接:http://jinyejixie.com/article32/iicisc.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供App設計、ChatGPT、建站公司、網(wǎng)站營銷、小程序開發(fā)、微信小程序
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)