TAG:
参数都以VARIANT来传递,用IDispatch接口来调用 HRESULT hr = NULL; IDispatch* pIDispatch = NULL; wchar_t progid[] = L"Component.Test"; //组件名 CLSID clsid; hr = ::CLSIDFromProgID(progid, &clsid); hr = ::CoInitialize(NULL); hr = ::CoCreateInstance(clsid, NULL, CLSCTX_INPROC_SERVER, IID_IDispatch, (void**)&pIDispatch); if (SUCCEEDED(hr)) { DISPID dispid; OLECHAR* name = L"MethodName"; //调用的函数名 hr = pIDispatch->GetIDsOfNames(IID_NULL, &name, 1, GetUserDefaultLCID(), &dispid); if (SUCCEEDED(hr)) { UINT iError = -1; VARIANT rarg; ::VariantInit(&rarg); VARIANT var[1]; ::VariantInit(&var[0]); var[0].vt = VT_I2; //参数类型 var[0].iVal = 700; //参数值 DISPPARAMS param; param.cArgs = 1; param.rgvarg = var; param.cNamedArgs = 0; param.rgdispidNamedArgs = NULL; hr = pIDispatch->Invoke(dispid, IID_NULL, GetUserDefaultLCID(), DISPATCH_METHOD, ¶m, &rarg, NULL, &iError); if (SUCCEEDED(hr)) { //调用成功 } ::VariantClear(&rarg); ::VariantClear(&var[0]); } pIDispatch->Release(); } (iwgh) |