首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

VC++ 調用 OCX 方法完整示例教程

     編輯:程式設計綜合問答

前言

在 VC++ 開發中,調用 OCX (OLE Control Extension) 控件的方法是常見需求。本文提供一個完整的 VC++ 2010 調用 OCX 方法的示例,幫助開發者快速上手。

核心步驟

  1. 在專案中導入 OCX 控件,生成對應的包裝類
  2. 使用 COleDispatchDriver 或類別向導生成的包裝類來調用方法
  3. 通過 InvokeHelper 方法傳遞參數並獲取返回值

完整代碼示例

// 假設 OCX 控件的 ProgID 為 "MyOcx.Control"
// 1. 初始化 COM 庫
AfxOleInit();

// 2. 創建控件實例
COleDispatchDriver oleDriver;
CLSID clsid;
HRESULT hr = CLSIDFromProgID(L"MyOcx.Control", &clsid);
if (SUCCEEDED(hr)) {
    hr = oleDriver.CreateDispatch(clsid);
    if (SUCCEEDED(hr)) {
        // 3. 調用無參數方法
        oleDriver.InvokeHelper(0x1, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
        
        // 4. 調用帶參數方法並獲取返回值
        VARIANT result;
        VARIANT arg1; arg1.vt = VT_I4; arg1.lVal = 100;
        VARIANT arg2; arg2.vt = VT_BSTR; arg2.bstrVal = SysAllocString(L"Test");
        static BYTE parms[] = VTS_I4 VTS_BSTR;
        oleDriver.InvokeHelper(0x2, DISPATCH_METHOD, VT_VARIANT, &result, parms, arg1.lVal, arg2.bstrVal);
        
        // 5. 處理返回值
        if (result.vt == VT_BSTR) {
            CString strResult(result.bstrVal);
            AfxMessageBox(strResult);
        }
        VariantClear(&result);
        SysFreeString(arg2.bstrVal);
    }
}

關鍵點說明

  • DISPID: 0x1, 0x2 為方法的分派 ID,可通過物件瀏覽器查看
  • 參數類型: 使用 VARIANT 結構,VT_I4 表示長整型,VT_BSTR 表示字符串
  • 記憶體管理: BSTR 字符串使用後需調用 SysFreeString 釋放
  • 錯誤處理: 建議檢查每個 HRESULT 返回值

參考資源

更多詳細信息請參考:VC++調用OCX方法完整Demo

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