wine/dlls/oleaut32/dispatch.c
2000-12-19 23:29:58 +00:00

125 lines
3.1 KiB
C

/**
* Dispatch API functions
*
* Copyright 2000 Francois Jacques, Macadamian Technologies Inc.
*
* ---
*
* TODO: Type coercion is implemented in variant.c but not called yet.
*/
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <ctype.h>
#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);
}