+ -
当前位置:首页 → 问答吧 → IDispatch::Invoke method参数调用问题

IDispatch::Invoke method参数调用问题

时间:2011-12-26

来源:互联网

对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, &params, &shortVal, NULL, NULL); //hr = 0x8002000e Invalid number of parameters.

}
......
请问各位: Invoke参数哪儿处理的不对?

作者: yu549867265   发布时间: 2011-12-26


补充: 我想得到SI2(SHORT BVI2, SHORT* BRI2, SHORT* pVal)中当BVI2 = 5,*BRI2 = 5时,*pVal的返回值,通过&shortVal取出。

作者: yu549867265   发布时间: 2011-12-26