首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> C++ 入門

C++ 類別跨 DLL 邊界封裝技術:扁平化介面與呼叫慣例統一

     編輯:C++ 入門

C++ 類別包含建構函式、解構函式、DoSomething 等關鍵函式。需將每個函式包裝為等價 C 函式。核心要點:

  1. 每個 C++ 類別映射為簡單 C 函式。
  2. 明確使用 __stdcall 呼叫慣例。前文知簡單調用 MSVC DLL 無格式 C 函式很麻煩,放棄嘗試則較易——讓 Borland 調用 Microsoft DLL 最簡單辦法是 DLL 導出無格式、無修飾、__stdcall C 函式。Borland/MSVC 對 __cdecl 處理不同,通常對 __stdcall 也不同(MSVC 修飾),但可加 .DEF 檔阻止修飾。
  3. new_CFoo 回傳指向 CFoo 物件的指標,BCB 呼叫端必須本地保存。雖 BCB 不能調用 MSVC DLL 導出類別的成員函式,但能儲存物件位址。new_CFoo 回傳 CFoo*,BCB 只能儲存並傳回 DLL,不可解構(不會按預期工作)。
  4. CFoo_DoSomething 以 reinterpret_cast 將指標還原為 CFoo* 呼叫成員函式(見 reinterpret_cast 即知處理醜陋代碼)。
  5. 指標亦為 delete_CFoo 參數。封裝 DLL 刪除物件至關重要,不可在 BCB 對指標呼叫 delete。

此模式實現跨編譯器類別介面互操作,關鍵在扁平化為 C 風格介面與統一 __stdcall 慣例。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved