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