IDispatch::Invoke method参数调用问题
对IDispatch::Invoke method 不熟悉,照着MSDN上的说明写了这样的调用,无法得到我想要的东西,恳请各位高手指点,在此谢过!!
我想取出IDL文件中Iocls接口下的方法“SI2”的方法的返回值:
SI2 方法定义:
SI2(SHORT BVI2, SHORT* BRI2, SHORT* pVal)
Invoke方法:
......
hr = cls1->QueryInterface(IID_IDispatch, (LPVOID*)&obj); //cls1为指向接口Iocls的指针
DISPPARAMS params;
params.cArgs = 3;
params.cNamedArgs = 3;
if(SUCCEEDED(hr))
{
//因为SI2有三个参数。。
params.rgvarg = new VARIANT[params.cArgs];
params.rgvarg[0].vt = VT_I2 | VT_BYREF;
params.rgvarg[0].llVal = 0;
params.rgvarg[0].vt = VT_I2 | VT_BYREF;
params.rgvarg[0].llVal = 5;
params.rgvarg[1].vt = VT_I2;
params.rgvarg[1].llVal = 5;
VARIANT shortVal;
VariantInit(&shortVal);
DISPID dispid;
OLECHAR FAR* szMember = L"SI2";
hr = obj->GetIDsOfNames(IID_NULL, &szMember, 1, LOCALE_SYSTEM_DEFAULT, &dispid); //hr = S_OK;
hr = obj->Invoke(dispid, IID_NULL, LOCALE_SYSTEM_DEFAULT, DISPATCH_METHOD, ¶ms, &shortVal, NULL, NULL); //hr = 0x8002000e Invalid number of parameters.
}
......
请问各位: Invoke参数哪儿处理的不对?