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

BCB 環境建立 CORBA 用戶端完整指南:靜態/動態綁定與 DII 實作

     編輯:關於C++

一、CORBA Client Wizard 建立專案

  1. File → New → Multitier → CORBA Client
  2. 選擇 Console 或 VCL Forms 應用程式。
  3. 勾選 VCL 可使用視覺元件,但犧牲跨平台性;不勾選則生成可移植程式碼。
  4. 加入定義伺服器介面的 IDL 檔案(稍後亦可 Project → Add to Project 加入)。

Wizard 自動生成 ORB 初始化程式碼:

CORBA::ORB_var orb = CORBA::ORB_init(argc, argv);

若需 Callback,勾選啟用 BOA(Basic Object Adapter)。

二、使用 Stubs(靜態綁定)

IDL 編譯生成 xxx_c.cpp、xxx_c.hh(Client Stubs)。切勿手動修改生成檔。

Use CORBA Object Wizard 綁定介面

  1. Edit → Use CORBA Object
  2. 選擇 IDL 檔與目標介面。
  3. 可選指定物件實例名稱。
  4. 選擇綁定機制:
  • VCL Forms:在 Form 類別新增屬性保存 Stub 實例。
  • Console:在 main() 區域變數實例化。
  • WinMain:在 WinMain() 變數實例化。
  • 指定單元/類別:在任意類別新增屬性。

生成綁定程式碼範例

#include 
#include 
#include "MyServerObj_c.hh"
#pragma argsused
int main(int argc, char* argv[]) {
    try {
        CORBA::ORB_var orb = CORBA::ORB_init(argc, argv);
        MyServerObj_var TheObject = MyServerObj::_bind("InstanceName");
        // 透過 TheObject 呼叫遠端方法
    } catch (const CORBA::Exception& e) {
        cerr << e << endl; return 1;
    }
    return 0;
}

⚠️ 全域 Stub 變數禁忌

Stub 釋放時會遞減 CORBA 參考計數,若為全域變數,釋放順序可能早於 orb,導致存取已釋放的 ORB。務必使用區域變數或類別成員;若必須全域,在 orb 釋放前手動設為 NULL 解除綁定。

三、動態呼叫介面

無需 Stubs,執行期編碼/解碼參數,效能較低但極具彈性(介面未知時)。

DII 五步驟

  1. 建立泛型物件:
    CORBA::Object_var diiObj;
    try { diiObj = orb->bind("IDL:ServerObj:1.0"); }
    catch (const CORBA::Exception& e) { /* 處理綁定失敗 */ }
  2. 建立 Request 物件:CORBA::Request_var req = diiObj->_request("methodName");
  3. 添加參數(CORBA::NVList 存放 CORBA::Any):
    CORBA::Any arg; arg <<= (const char*)"argvalue";
    CORBA::NVList_ptr args = req->arguments();
    args->add_value("arg1", arg, CORBA::ARG_IN);
  4. 呼叫:req->invoke();
  5. 檢查例外與取回結果:
    if (req->env()->exception()) { /* 處理例外 */ }
    else {
        CORBA::Any* result = req->result()->value();
        CORBA::Float val; *result >>= val;
    }

四、進階綁定選項

若專案僅包含生成的 Client 單元(無 IDL),無法使用 Wizard,需自行撰寫綁定程式碼。可利用 VisiBroker 專屬選項:指定特定伺服器、停用自動重新綁定等。詳見 VisiBroker 開發指南。

五、總結對照

特性靜態綁定 (Stubs)動態綁定 (DII)
效能高(編譯期編碼)較低(執行期編碼/解碼)
型別安全編譯期檢查執行期檢查
程式碼完成提示支援無
適用場景介面穩定、效能敏感介面動態、外掛架構、Scripting
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved