dispatch patch

Ove Kaaven ovehk at ping.uio.no
Sun Sep 30 12:16:18 CDT 2001


Log:
Ove Kaaven <ovek at transgaming.com>
Implemented DispGetParam.

Index: dlls/oleaut32/dispatch.c
===================================================================
RCS file: /home/wine/wine/dlls/oleaut32/dispatch.c,v
retrieving revision 1.4
diff -u -r1.4 dispatch.c
--- dlls/oleaut32/dispatch.c	2001/07/25 00:43:31	1.4
+++ dlls/oleaut32/dispatch.c	2001/09/30 15:55:44
@@ -121,12 +121,26 @@
 	VARIANT    *pvarResult,  /* [out] */
 	UINT       *puArgErr)    /* [out] */
 {
-    HRESULT hr = E_FAIL;
+    /* position is counted backwards */
+    UINT pos;
+    HRESULT hr;
 
-    /**
-     * TODO : Call VariantChangeTypeEx with LCID 0 (system)
-     */
+    TRACE("position=%ld, cArgs=%ld, cNamedArgs=%ld\n",
+          position, pdispparams->cArgs, pdispparams->cNamedArgs);
+    if (position < pdispparams->cArgs) {
+      /* positional arg? */
+      pos = pdispparams->cArgs - position - 1;
+    } else {
+      /* FIXME: is this how to handle named args? */
+      for (pos=0; pos<pdispparams->cNamedArgs; pos++)
+        if (pdispparams->rgdispidNamedArgs[pos] == position) break;
 
-    FIXME("Coercion of arguments not implemented\n");
-    return (hr);
+      if (pos==pdispparams->cNamedArgs)
+        return DISP_E_PARAMNOTFOUND;
+    }
+    hr = VariantChangeType(pvarResult,
+                           &pdispparams->rgvarg[pos],
+                           0, vtTarg);
+    if (hr == DISP_E_TYPEMISMATCH) *puArgErr = pos;
+    return hr;
 }





More information about the wine-patches mailing list