Robert Shearman : oleaut32:
Implement getting of all properties in IPictureDisp::Invoke.
Alexandre Julliard
julliard at wine.codeweavers.com
Fri Jul 28 07:15:27 CDT 2006
Module: wine
Branch: refs/heads/master
Commit: e0e7d96ee6e94978a1214ee76ce11dff0da3edd5
URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=e0e7d96ee6e94978a1214ee76ce11dff0da3edd5
Author: Robert Shearman <rob at codeweavers.com>
Date: Fri Jul 28 01:24:10 2006 +0100
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 b2d9cf0..f937c2f 100644
--- a/dlls/oleaut32/olepicture.c
+++ b/dlls/oleaut32/olepicture.c
@@ -2065,6 +2065,11 @@ static HRESULT WINAPI OLEPictureImpl_Inv
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_Inv
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 b4a5697..b5f7c40 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);
}
More information about the wine-cvs
mailing list