/** * Dispatch API functions * * Copyright 2000 Francois Jacques, Macadamian Technologies Inc. * * --- * * TODO: Type coercion is implemented in variant.c but not called yet. */ #include #include #include #include #include "winerror.h" #include "winreg.h" /* for HKEY_LOCAL_MACHINE */ #include "winnls.h" /* for PRIMARYLANGID */ #include "ole.h" #include "heap.h" #include "wine/obj_oleaut.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, /* object instance */ ITypeInfo* ptinfo, /* object's type info */ DISPID dispidMember, /* member id */ USHORT wFlags, /* kind of method call */ DISPPARAMS* pparams, /* array of arguments */ VARIANT* pvarResult, /* result of method call */ EXCEPINFO* pexcepinfo, /* information about exception */ UINT* puArgErr /* 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, OLECHAR** rgszNames, UINT cNames, DISPID* rgdispid) { HRESULT hr = E_FAIL; hr = ICOM_CALL3(GetIDsOfNames, ptinfo, rgszNames, cNames, rgdispid); return (hr); } /****************************************************************************** * DispGetParam (OLEAUT32.30) * * 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, UINT position, VARTYPE vtTarg) { HRESULT hr = E_FAIL; /** * TODO : Call VariantChangeTypeEx with LCID 0 (system) */ FIXME("Coercion of arguments not implemented\n"); return (hr); }