/** * Dispatch API functions * * Copyright 2000 Francois Jacques, Macadamian Technologies Inc. * * --- * * TODO: Type coercion is implemented in variant.c but not called yet. */ #include "config.h" #include #include #include #include #include "windef.h" #include "ole.h" #include "oleauto.h" #include "winerror.h" #include "winreg.h" /* for HKEY_LOCAL_MACHINE */ #include "winnls.h" /* for PRIMARYLANGID */ #include "wine/obj_oleaut.h" #include "heap.h" #include "debugtools.h" DEFAULT_DEBUG_CHANNEL(ole); DECLARE_DEBUG_CHANNEL(typelib); /****************************************************************************** * DispInvoke (OLEAUT32.30) * * * Calls method of an object through its IDispatch interface. * * NOTES * - Defer method invocation to ITypeInfo::Invoke() * * RETURNS * * S_OK on success. */ HRESULT WINAPI DispInvoke( VOID *_this, /* [in] object instance */ ITypeInfo *ptinfo, /* [in] object's type info */ DISPID dispidMember, /* [in] member id */ USHORT wFlags, /* [in] kind of method call */ DISPPARAMS *pparams, /* [in] array of arguments */ VARIANT *pvarResult, /* [out] result of method call */ EXCEPINFO *pexcepinfo, /* [out] information about exception */ UINT *puArgErr) /* [out] index of bad argument(if any) */ { HRESULT hr = E_FAIL; /** * TODO: * For each param, call DispGetParam to perform type coercion */ FIXME("Coercion of arguments not implemented\n"); hr = ICOM_CALL7(Invoke, ptinfo, _this, dispidMember, wFlags, pparams, pvarResult, pexcepinfo, puArgErr); return (hr); } /****************************************************************************** * DispGetIDsOfNames (OLEAUT32.29) * * Convert a set of names to dispids, based on information * contained in object's type library. * * NOTES * - Defers to ITypeInfo::GetIDsOfNames() * * RETURNS * * S_OK on success. */ HRESULT WINAPI DispGetIDsOfNames( ITypeInfo *ptinfo, /* [in] */ OLECHAR **rgszNames, /* [in] */ UINT cNames, /* [in] */ DISPID *rgdispid) /* [out] */ { HRESULT hr = E_FAIL; hr = ICOM_CALL3(GetIDsOfNames, ptinfo, rgszNames, cNames, rgdispid); return (hr); } /****************************************************************************** * DispGetParam (OLEAUT32.28) * * Retrive a parameter from a DISPPARAMS structures and coerce it to * specified variant type * * NOTES * Coercion is done using system (0) locale. * * RETURNS * * S_OK on success. */ HRESULT WINAPI DispGetParam( DISPPARAMS *pdispparams, /* [in] */ UINT position, /* [in] */ VARTYPE vtTarg, /* [in] */ VARIANT *pvarResult, /* [out] */ UINT *puArgErr) /* [out] */ { HRESULT hr = E_FAIL; /** * TODO : Call VariantChangeTypeEx with LCID 0 (system) */ FIXME("Coercion of arguments not implemented\n"); return (hr); }