Implementation of Dispatch API.

This commit is contained in:
Francois Jacques 2000-12-19 23:29:58 +00:00 committed by Alexandre Julliard
parent 5d4cf0679a
commit 31c6ac2aac
3 changed files with 129 additions and 3 deletions

View File

@ -11,6 +11,7 @@ SYMBOLFILE = $(MODULE).tmp.o
C_SRCS = \
connpt.c \
dispatch.c \
ole2disp.c \
oleaut.c \
olefont.c \

125
dlls/oleaut32/dispatch.c Normal file
View File

@ -0,0 +1,125 @@
/**
* 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);
}

View File

@ -37,9 +37,9 @@ debug_channels (ole typelib)
25 stdcall SafeArrayGetElement(ptr ptr ptr) SafeArrayGetElement
26 stdcall SafeArrayPutElement(ptr ptr ptr) SafeArrayPutElement
27 stdcall SafeArrayCopy(ptr ptr) SafeArrayCopy
28 stub DispGetParam
29 stub DispGetIDsOfNames
30 stub DispInvoke
28 stdcall DispGetParam(ptr long long ptr ptr) DispGetParam
29 stdcall DispGetIDsOfNames(ptr ptr long ptr) DispGetIDsOfNames
30 stdcall DispInvoke(ptr ptr long long ptr ptr ptr ptr) DispInvoke
31 stdcall CreateDispTypeInfo(ptr long ptr) CreateDispTypeInfo
32 stdcall CreateStdDispatch(ptr ptr ptr ptr) CreateStdDispatch
33 stdcall RegisterActiveObject(ptr ptr long ptr) RegisterActiveObject