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