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

ActiveX 控制項除錯與使用全攻略:測試容器、方法調用、專案整合與動態建立

     編輯:關於C語言

ActiveX 控制項無法獨立執行:必須裝載於容器

ActiveX 控制項 (OCX) 是 COM 物件,實作 IOleObject、IOleControl 等介面,需由容器 提供站點、管理生命週期、轉發訊息。開發階段使用 ActiveX Control Test Container (TSTCON) 進行除錯。

啟動測試容器除錯

  1. 專案屬性 → **Debug** 頁 → **Executable for debug session** 選擇 TSTCON32.EXE (VC6) 或 TestContainer.exe (VS2008+)。
  2. 或 **Command** 填寫容器完整路徑,**Working Directory** 為專案輸出目錄。
  3. 按 F5 啟動除錯,容器啟動後會提示「容器無除錯資訊」,忽略繼續。

在容器中載入與測試控制項

  1. 容器選單 **Edit → Insert OLE Control...** (或 **Control → Insert**)。
  2. 對話框列出系統已註冊的控制項 (含剛編譯的),選擇您的控制項確定。
  3. 容器視窗顯示控制項畫面 (繪製、UI 互動)。

調用方法與屬性測試

    1. 選單 **Edit → Invoke Methods...** (或 **Control → Invoke Method**)。 2. 下拉清單顯示控制項所有 **IDispatch 方法** (自動化介面)。 3. 選擇方法,參數列表自動顯示 (型別、名稱)。 4. 輸入參數值,按 **Invoke** 執行。 5. 返回值 / 錯誤碼 顯示於對話框。

除錯技巧:TRACE、斷點、事件追蹤

  • 控制項程式碼中使用 TRACE 宏,輸出至 VC **Output 視窗**。
  • 在控制項原始碼設定**斷點**,容器觸發動作時自動中斷。
  • 3. 容器 **View → Event Log** 可記錄控制項觸發的事件 (Click、KeyPress 等),驗證事件觸發順序。

在 VC 專案中整合現有 ActiveX 控制項

方法一:專案加入元件 (產生包裝類)

    1. 專案選單 **Project → Add To Project → Components and Controls** (VS2008+: **Project → Add Class → MFC Class from ActiveX Control**)。 2. 選擇 **Registered ActiveX Controls** → 您的控制項。 3. VC 產生 .h/.cpp 包裝類 (繼承 CWnd),含所有方法/屬性/事件的成員函數。 4. 對話框編輯器 **工具箱** 自動出現控制項圖示,拖放即可使用。

方法二:對話框編輯器直接插入

    1. 對話框編輯器右鍵 **Insert ActiveX Control...**。 2. 選擇控制項,VC 自動產生包裝類並加入對話框類別成員變數。 3. 對話框類別 DoDataExchange 含 DDX_Control 關聯。

動態建立控制項 (非對話框資源)


// 包裝類為 CMyAxCtrl
CMyAxCtrl* pCtrl = new CMyAxCtrl;
CRect rect(10, 10, 310, 210);
// CreateControl 內部呼叫 COleControlContainer::CreateControl
if (pCtrl->CreateControl(CLSID_MyAxCtrl, WS_VISIBLE | WS_CHILD, rect, this, IDC_MYCTRL)) {
    // 成功,可呼叫方法
    pCtrl->SomeMethod(param);
}
else {
    delete pCtrl; // 建立失敗需手動刪除
}

關鍵:動態建立需指定 CLSID (或 ProgID)、視窗樣式、矩形、父視窗、控制項 ID。包裝類建構函數不建立視窗,必須呼叫 CreateControl。

Web 網頁中使用 (HTML OBJECT 標籤)



    


  • CLASSID:控制項 GUID。
  • CODEBASE:.CAB 封裝下載路徑 (含版本),IE 自動下載安裝未註冊控制項。
  • PARAM:初始化屬性。

常見問題與解決

問題原因解決
容器無法插入控制項控制項未註冊、CLSID 錯誤、位元數不匹配 (x64 容器載入 x86 OCX)regsvr32 MyCtrl.ocx,確認目標平台一致
Invoke Method 參數型別錯誤傳入 VARIANT 型別不符 (如 BSTR vs LONG)查看包裝類生成的函數原型,嚴格對應
事件不觸發事件映射表 EVENT_MAP 缺漏、連接點未建議ClassWizard 添加事件、檢查 FireEvent 呼叫
授權失敗 (License)控制項需授權檔 (.lic),容器無授權資訊開發機安裝授權、或使用 LPK 工具產生 .lpk 檔供網頁使用
動態建立 CreateControl 失敗父視窗未初始化 OLE、未呼叫 AfxOleInitCWinApp::InitInstance 呼叫 AfxOleInit()

總結

ActiveX 控制項開發流程:**編譯 → 測試容器載入 → Invoke Methods 驗證介面 → 事件日誌追蹤 → 專案整合產生包裝類 → 對話框/動態建立/網頁部署**。掌握測試容器操作、包裝類生成機制、動態建立 API、授權模型、跨平台位元數匹配,能讓您高效完成從開發到部署的完整閉環。

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