日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
C++類包含函數(shù)說明

C++類包含三個我們關(guān)心的函數(shù):構(gòu)造函數(shù),析構(gòu)函數(shù),和所有重要的 DoSomething 函數(shù),我們需要把每一個函數(shù)包裹成與其等價的C++函數(shù),在這里拿出來和大家分享一下。

 
 
 
  1. // original class  
  2.   class CFoo  
  3.   {  
  4.   public:  
  5.    CFoo(int x);  
  6.    ~CFoo();  
  7.    int DoSomething(int y);  
  8.   };  
  9.   // flattened C code  
  10.   void* __stdcall new_CFoo(int x)  
  11.   {  
  12.    return new CFoo(x);  
  13.   }  
  14.   int __stdcall CFoo_DoSomething(void* handle, int y)  
  15.   {  
  16.    CFoo *foo = reinterpret_cast *>(handle);  
  17.    return foo->DoSomething(y);  
  18.   }  
  19.   void __stdcall delete_CFoo(void *handle)  
  20.   {  
  21.    CFoo *foo = reinterpret_cast *>(handle);  
  22.    delete foo;  
  23.   } 

這里有幾個比較重要的地方要注意。首先,注意每一個C++類被映射為一個簡單的 C 函數(shù)。其次,觀察到我們?yōu)?C 函數(shù)明確地使用 __stdcall 調(diào)用習(xí)慣。在前一篇 DLL 文章里,我們知道簡單的調(diào)用在 MSVC DLL 里的無格式 C 函數(shù),真是很麻煩。

如果我們放棄越過種種艱難困苦去用它,我們可以使這個努力稍微容易一點。讓 Borland 調(diào)用 Microsoft DLL 最簡單的辦法是 DLL 導(dǎo)出無格式,無修飾,__stdcall 調(diào)用習(xí)慣的 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 導(dǎo)出類的成員函數(shù)。但是,這并不意味著它不能存儲這樣對象的地址。new_CFoo 返回的是一個 CFoo 對象的指針。

BCB 客戶端可以存儲這個指針,但不能用。BCB 不能廢棄它(不應(yīng)當嘗試這么做)。讓這個觀點更容易理解一點,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)緊要的。你不應(yīng)當在 BCB 里對空指針調(diào)用 delete。顯然它不會按你想的去做。

【編輯推薦】

  1. C與C++中標準輸入實現(xiàn)方式上的一點區(qū)別
  2. C++編譯器如何對Const常量進行分配存儲空間
  3. C++類庫設(shè)計的基本構(gòu)思與方法
  4. 玩轉(zhuǎn)C++語言的幾種方法
  5. 如何更好的進行C++代碼編制

文章名稱:C++類包含函數(shù)說明
標題鏈接:http://www.5511xx.com/article/cceosdh.html