在 VC++ 開發中,調用 OCX (OLE Control Extension) 控件的方法是常見需求。本文提供一個完整的 VC++ 2010 調用 OCX 方法的示例,幫助開發者快速上手。
COleDispatchDriver 或類別向導生成的包裝類來調用方法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);
}
}
SysFreeString 釋放更多詳細信息請參考:VC++調用OCX方法完整Demo