Skip to content
Snippets Groups Projects
Commit 31c6ac2a authored by Francois Jacques's avatar Francois Jacques Committed by Alexandre Julliard
Browse files

Implementation of Dispatch API.

parent 5d4cf067
No related branches found
No related tags found
No related merge requests found
......@@ -11,6 +11,7 @@ SYMBOLFILE = $(MODULE).tmp.o
C_SRCS = \
connpt.c \
dispatch.c \
ole2disp.c \
oleaut.c \
olefont.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);
}
......@@ -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
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment