From e0e7d96ee6e94978a1214ee76ce11dff0da3edd5 Mon Sep 17 00:00:00 2001 From: Robert Shearman Date: Fri, 28 Jul 2006 01:24:10 +0100 Subject: [PATCH] oleaut32: Implement getting of all properties in IPictureDisp::Invoke. --- dlls/oleaut32/olepicture.c | 65 ++++++++++++++++++++++---------- dlls/oleaut32/tests/olepicture.c | 13 ++++++- 2 files changed, 57 insertions(+), 21 deletions(-) diff --git a/dlls/oleaut32/olepicture.c b/dlls/oleaut32/olepicture.c index b2d9cf0fc4f..f937c2fb971 100644 --- a/dlls/oleaut32/olepicture.c +++ b/dlls/oleaut32/olepicture.c @@ -2065,6 +2065,11 @@ static HRESULT WINAPI OLEPictureImpl_Invoke( if (wFlags & DISPATCH_PROPERTYGET) { + if (pDispParams->cArgs != 0) + { + ERR("param count for DISPATCH_PROPERTYGET was %d instead of 0\n", pDispParams->cArgs); + return DISP_E_BADPARAMCOUNT; + } if (!pVarResult) { ERR("null pVarResult not allowed when DISPATCH_PROPERTYGET specified\n"); @@ -2085,30 +2090,52 @@ static HRESULT WINAPI OLEPictureImpl_Invoke( return DISP_E_MEMBERNOTFOUND; } - if (dispIdMember == DISPID_PICT_TYPE) + switch (dispIdMember) { - TRACE("DISPID_PICT_TYPE\n"); - if (!(wFlags & INVOKE_PROPERTYGET)) - return DISP_E_PARAMNOTFOUND; - if (pDispParams->cArgs != 0) - return DISP_E_BADPARAMCOUNT; - if (pVarResult) + case DISPID_PICT_HANDLE: + if (wFlags & DISPATCH_PROPERTYGET) { - VariantInit(pVarResult); - V_VT(pVarResult) = VT_I2; - return OLEPictureImpl_get_Type((IPicture *)&This->lpVtbl, &V_I2(pVarResult)); + TRACE("DISPID_PICT_HANDLE\n"); + V_VT(pVarResult) = VT_I4; + return IPicture_get_Handle((IPicture *)&This->lpVtbl, &V_UINT(pVarResult)); } - return S_OK; + break; + case DISPID_PICT_HPAL: + if (wFlags & DISPATCH_PROPERTYGET) + { + TRACE("DISPID_PICT_HPAL\n"); + V_VT(pVarResult) = VT_I4; + return IPicture_get_hPal((IPicture *)&This->lpVtbl, &V_UINT(pVarResult)); + } + break; + case DISPID_PICT_TYPE: + if (wFlags & DISPATCH_PROPERTYGET) + { + TRACE("DISPID_PICT_TYPE\n"); + V_VT(pVarResult) = VT_I2; + return OLEPictureImpl_get_Type((IPicture *)&This->lpVtbl, &V_I2(pVarResult)); + } + break; + case DISPID_PICT_WIDTH: + if (wFlags & DISPATCH_PROPERTYGET) + { + TRACE("DISPID_PICT_WIDTH\n"); + V_VT(pVarResult) = VT_I4; + return IPicture_get_Width((IPicture *)&This->lpVtbl, &V_I4(pVarResult)); + } + break; + case DISPID_PICT_HEIGHT: + if (wFlags & DISPATCH_PROPERTYGET) + { + TRACE("DISPID_PICT_HEIGHT\n"); + V_VT(pVarResult) = VT_I4; + return IPicture_get_Height((IPicture *)&This->lpVtbl, &V_I4(pVarResult)); + } + break; } - else - { - FIXME("(dispid: %ld):Stub\n",dispIdMember); - VariantInit(pVarResult); - V_VT(pVarResult) = VT_BOOL; - V_BOOL(pVarResult) = FALSE; - return S_OK; - } + ERR("invalid dispid 0x%lx or wFlags 0x%x\n", dispIdMember, wFlags); + return DISP_E_MEMBERNOTFOUND; } diff --git a/dlls/oleaut32/tests/olepicture.c b/dlls/oleaut32/tests/olepicture.c index b4a5697a34f..b5f7c401439 100644 --- a/dlls/oleaut32/tests/olepicture.c +++ b/dlls/oleaut32/tests/olepicture.c @@ -337,14 +337,23 @@ static void test_Invoke(void) hr = IPictureDisp_Invoke(picdisp, DISPID_PICT_HPAL, &IID_NULL, 0, DISPATCH_PROPERTYGET, &dispparams, &varresult, NULL, NULL); ok_ole_success(hr, "IPictureDisp_Invoke"); + ok(V_VT(&varresult) == VT_I4, "V_VT(&varresult) should have been VT_UINT instead of %d\n", V_VT(&varresult)); hr = IPictureDisp_Invoke(picdisp, DISPID_PICT_HPAL, &IID_NULL, 0, DISPATCH_METHOD, &dispparams, &varresult, NULL, NULL); ok(hr == DISP_E_MEMBERNOTFOUND, "IPictureDisp_Invoke should have returned DISP_E_MEMBERNOTFOUND instead of 0x%08lx\n", hr); hr = IPictureDisp_Invoke(picdisp, 0xdeadbeef, &IID_NULL, 0, DISPATCH_PROPERTYGET, &dispparams, &varresult, NULL, NULL); - todo_wine { ok(hr == DISP_E_MEMBERNOTFOUND, "IPictureDisp_Invoke should have returned DISP_E_MEMBERNOTFOUND instead of 0x%08lx\n", hr); - } + + dispparams.cArgs = 1; + dispparams.rgvarg = &vararg; + hr = IPictureDisp_Invoke(picdisp, DISPID_PICT_HPAL, &IID_NULL, 0, DISPATCH_PROPERTYGET, &dispparams, &varresult, NULL, NULL); + ok(hr == DISP_E_BADPARAMCOUNT, "IPictureDisp_Invoke should have returned DISP_E_BADPARAMCOUNT instead of 0x%08lx\n", hr); + + dispparams.cArgs = 1; + dispparams.rgvarg = &vararg; + hr = IPictureDisp_Invoke(picdisp, DISPID_PICT_HPAL, &IID_NULL, 0, DISPATCH_PROPERTYGET, &dispparams, &varresult, NULL, NULL); + ok(hr == DISP_E_BADPARAMCOUNT, "IPictureDisp_Invoke should have returned DISP_E_BADPARAMCOUNT instead of 0x%08lx\n", hr); IPictureDisp_Release(picdisp); }