成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

C++類包含函數說明

開發 后端
在當今社會中,經常有屬于同一類的對象,比如,你的汽車只是世界上很多汽車中的一輛,希望大家能夠得到自己想要的信息。

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

  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<CFoo *>(handle);  
  17.    return foo->DoSomething(y);  
  18.   }  
  19.   void __stdcall delete_CFoo(void *handle)  
  20.   {  
  21.    CFoo *foo = reinterpret_cast<CFoo *>(handle);  
  22.    delete foo;  
  23.   } 

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

如果我們放棄越過種種艱難困苦去用它,我們可以使這個努力稍微容易一點。讓 Borland 調用 Microsoft DLL 最簡單的辦法是 DLL 導出無格式,無修飾,__stdcall 調用習慣的 C++函數。Borland 和 Microsoft 對 __cdecl 函數的處理上是不同的。

通常,他們對 __stdcall 函數也不同,因為 MSVC 修飾 __stdcall 函數,但我們可以通過添加一個 DEF 文件到 MSVC 工程里來阻止這種行為。參見下載部分的例子有 DEF 文件的例子。其它關于代碼要注意的事情是 new_CFoo 函數返回一個指向 CFoo 對象的指針。BCB 調用者必須在本地保存這個指針。這可能看起來和這篇文章的主題有點矛盾。

畢竟,我想 BCB 不能使用來自 MSVC DLL 的 C++?如果那是正確的,那么為什么我們還要返回一個 CFoo 對象指針呢?答案是 BCB 不能調用 MSVC DLL 導出類的成員函數。但是,這并不意味著它不能存儲這樣對象的地址。new_CFoo 返回的是一個 CFoo 對象的指針。

BCB 客戶端可以存儲這個指針,但不能用。BCB 不能廢棄它(不應當嘗試這么做)。讓這個觀點更容易理解一點,new_CFoo 返回一個空指針(總之它不能返回別的什么東西)。在 BCB 這邊,除了存儲它,然后把它傳回給 DLL,沒有什么可以安全地處理這個空指針的方法。

Ok,在我們繼續前進之前,還有另外兩個要十分注意的地方。首先,注意 CFoo_DoSomething 把空指針作為它的***個參數這個空指針與 new_CFoo 返回的是同一個空指針。空指針用 reinterpret_cast 被追溯到 CFoo 對象(你知道,當你看到一個 reinterpret_cast 的時候。

你正在處理是難看的代碼)。DoSomething 成員函數在轉換之后被調用。***注意空指針也是C++的參數。包裝 DLL 刪除對象是至關緊要的。你不應當在 BCB 里對空指針調用 delete。顯然它不會按你想的去做。

【編輯推薦】

  1. C與C++中標準輸入實現方式上的一點區別
  2. C++編譯器如何對Const常量進行分配存儲空間
  3. C++類庫設計的基本構思與方法
  4. 玩轉C++語言的幾種方法
  5. 如何更好的進行C++代碼編制
責任編輯:chenqingxiang 來源: CSDN
相關推薦

2010-01-26 10:42:26

C++函數

2010-01-18 13:54:28

函數

2010-01-14 17:08:10

C++日期

2010-01-27 10:22:53

C++基類

2010-02-02 18:14:38

Python函數

2010-01-28 13:27:12

C++類定義

2010-01-19 13:43:59

C++函數

2011-07-06 10:14:46

C#

2010-01-05 16:07:46

jQuery.prot

2010-01-18 15:53:27

C++析構函數

2010-01-19 18:35:12

靜態成員

2010-01-25 14:00:27

C++類

2010-01-27 10:13:22

C++類對象

2011-07-12 11:15:46

C++

2010-01-14 17:42:47

CC++

2010-01-25 10:54:18

C++設計

2010-01-26 13:42:28

C++指針

2010-01-26 13:36:27

C++設計

2011-02-23 10:21:18

ProFTPd參數

2011-11-28 15:26:40

Nginx配置
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久精品 | 精品日本中文字幕 | 日韩一区二区在线播放 | 欧美日韩在线视频观看 | 国产成人一区二区 | 国产精品欧美精品日韩精品 | 美女视频一区 | 欧美日韩福利视频 | 日韩欧美二区 | 四虎午夜剧场 | 一区二区久久 | 美日韩免费视频 | 超碰人人91 | 亚洲在线一区 | 国产精品久久久久久久一区探花 | 亚洲精品国产a久久久久久 午夜影院网站 | 国产日韩久久 | 欧美一级片在线看 | 欧美国产精品 | 国产色在线| 色婷婷综合成人av | 欧美国产精品久久久 | 久久91精品| a毛片视频网站 | 国产农村妇女毛片精品久久麻豆 | 欧美大片久久久 | 国产专区在线 | 久久高清| 蜜桃精品噜噜噜成人av | 久久成人精品视频 | 国产一区二区a | 欧美一区2区三区3区公司 | 99久久婷婷国产综合精品 | 91香蕉嫩草| 成人久草 | 伊人网伊人 | 一级毛片在线视频 | 青青草在线播放 | 欧美一级免费片 | 久久免费精品视频 | 久草欧美 |