28 0, 0, { (
DWORD_PTR)(__FILE__
": dispex_static_data") }
33 static const WCHAR objectW[] = {
'[',
'o',
'b',
'j',
'e',
'c',
't',
']',0};
63 #define DYNPROP_DELETED 0x01 85 #define DISPID_DYNPROP_0 0x50000000 86 #define DISPID_DYNPROP_MAX 0x5fffffff 88 #define FDEX_VERSION_MASK 0xf0000000 95 #define XIID(iface) &IID_ ## iface, 96 #define XDIID(iface) &DIID_ ## iface, 109 ERR(
"LoadRegTypeLib failed: %08x\n",
hres);
114 ITypeLib_Release(tl);
137 ITypeInfo_Release(ti);
183 ERR(
"GetTypeInfoOfGuid failed: %08x\n",
hres);
188 #define BUILTIN_ARG_TYPES_SWITCH \ 189 CASE_VT(VT_I2, INT16, V_I2); \ 190 CASE_VT(VT_I4, INT32, V_I4); \ 191 CASE_VT(VT_R4, float, V_R4); \ 192 CASE_VT(VT_BSTR, BSTR, V_BSTR); \ 193 CASE_VT(VT_BOOL, VARIANT_BOOL, V_BOOL) 196 #define BUILTIN_TYPES_SWITCH \ 197 BUILTIN_ARG_TYPES_SWITCH; \ 198 CASE_VT(VT_VARIANT, VARIANT, *); \ 199 CASE_VT(VT_PTR, void*, V_BYREF); \ 200 CASE_VT(VT_UNKNOWN, IUnknown*, V_UNKNOWN); \ 201 CASE_VT(VT_DISPATCH, IDispatch*, V_DISPATCH) 206 #define CASE_VT(x,a,b) case x: return TRUE 239 info->func_disp_idx = -1;
246 info->func_disp_idx =
data->func_disp_cnt++;
257 info->arg_types[
i] =
desc->lprgelemdescParam[
i].tdesc.vt;
259 info->prop_vt =
desc->elemdescFunc.tdesc.vt;
265 if(
desc->cParamsOpt) {
270 for(
i=0;
i <
info->argc;
i++) {
275 if(
desc->lprgelemdescParam[
i].u.paramdesc.wParamFlags & PARAMFLAG_FHASDEFAULT) {
284 info->call_vtbl_off =
desc->oVft/
sizeof(
void*);
289 vt =
desc->elemdescFunc.tdesc.vt;
290 info->get_vtbl_off =
desc->oVft/
sizeof(
void*);
294 vt =
desc->lprgelemdescParam->tdesc.vt;
295 info->put_vtbl_off =
desc->oVft/
sizeof(
void*);
324 if(
This->data->disp_tid) {
327 ERR(
"Could not get disp type info: %08x\n",
hres);
334 ERR(
"Out of memory\n");
338 data->func_disp_cnt = 0;
342 ERR(
"Out of memory\n");
354 hres = ITypeInfo_GetFuncDesc(ti,
i++, &funcdesc);
359 ITypeInfo_ReleaseFuncDesc(ti, funcdesc);
365 if(!
data->func_cnt) {
377 for(
i=0;
i <
data->func_cnt;
i++)
384 static int id_cmp(
const void *p1,
const void *p2)
391 unsigned i, func_cnt;
402 hres = ITypeInfo_GetTypeAttr(ti, &
attr);
404 ITypeInfo_Release(ti);
408 func_cnt =
attr->cFuncs;
409 ITypeInfo_ReleaseTypeAttr(ti,
attr);
413 ITypeInfo_Release(ti);
417 for(
i=0;
i < func_cnt;
i++) {
418 hres = ITypeInfo_GetFuncDesc(ti,
i, &funcdesc);
422 ids[
i] = funcdesc->memid;
423 ITypeInfo_ReleaseFuncDesc(ti, funcdesc);
426 ITypeInfo_Release(ti);
434 *ret_size = func_cnt;
442 return This->data->data;
446 if(!
This->data->data)
451 return This->data->data;
486 if(
This->dynamic_data)
487 return This->dynamic_data;
490 if(!
This->dynamic_data)
493 if(
This->data->vtbl &&
This->data->vtbl->populate_props)
494 This->data->vtbl->populate_props(
This);
496 return This->dynamic_data;
509 for(prop =
data->props; prop < data->
props+
data->prop_cnt; prop++) {
526 if(!
data->buf_size) {
531 }
else if(
data->buf_size ==
data->prop_cnt) {
538 data->props = new_props;
539 data->buf_size <<= 1;
542 prop =
data->props +
data->prop_cnt;
584 if(
This->data->vtbl &&
This->data->vtbl->value)
612 ERR(
"Could not get type info: %08x\n",
hres);
624 IUnknown_Release(unk);
710 static const WCHAR func_prefixW[] =
711 {
'\n',
'f',
'u',
'n',
'c',
't',
'i',
'o',
'n',
' '};
712 static const WCHAR func_suffixW[] =
713 {
'(',
')',
' ',
'{',
'\n',
' ',
' ',
' ',
' ',
'[',
'n',
'a',
't',
'i',
'v',
'e',
' ',
'c',
'o',
'd',
'e',
']',
'\n',
'}',
'\n'};
724 memcpy(
ptr, func_prefixW,
sizeof(func_prefixW));
725 ptr +=
sizeof(func_prefixW)/
sizeof(
WCHAR);
730 memcpy(
ptr, func_suffixW,
sizeof(func_suffixW));
786 FIXME(
"named args not supported\n");
794 new_dp.cArgs = dp->cArgs+1;
800 hres = IDispatch_QueryInterface(func_disp, &IID_IDispatchEx, (
void**)&dispex);
803 hres = IDispatchEx_InvokeEx(dispex, DISPID_VALUE, lcid,
flags, &new_dp,
res, ei, caller);
804 IDispatchEx_Release(dispex);
834 if(!
entry->func_obj) {
839 IDispatchEx_AddRef(&
entry->func_obj->dispex.IDispatchEx_iface);
858 if(
data->funcs[
n].id ==
id) {
863 if(
data->funcs[
n].id <
id)
869 WARN(
"invalid id %x\n",
id);
890 if((grfdex & fdexNameCaseSensitive) &&
strcmpW(
data->name_table[
n]->name,
name))
903 if(
This->data->vtbl &&
This->data->vtbl->get_dispid) {
922 hres = IServiceProvider_QueryService(caller, &SID_VariantConversion, &IID_IVariantChangeType, (
void**)&
change_type);
948 if(dp && dp->cArgs) {
949 FIXME(
"cArgs %d\n", dp->cArgs);
957 switch(
func->prop_vt) {
958 #define CASE_VT(vt,type,access) \ 961 hres = ((HRESULT (WINAPI*)(IUnknown*,type*))((void**)iface->lpVtbl)[func->get_vtbl_off])(iface,&val); \ 962 if(SUCCEEDED(hres)) \ 969 FIXME(
"Unhandled vt %d\n",
func->prop_vt);
972 IUnknown_Release(iface);
989 if(dp->cArgs != 1 || (dp->cNamedArgs == 1 && *dp->rgdispidNamedArgs != DISPID_PROPERTYPUT)
990 || dp->cNamedArgs > 1) {
991 FIXME(
"invalid args\n");
995 if(!
func->put_vtbl_off) {
996 FIXME(
"No setter\n");
1010 switch(
func->prop_vt) {
1011 #define CASE_VT(vt,type,access) \ 1013 hres = ((HRESULT (WINAPI*)(IUnknown*,type))((void**)iface->lpVtbl)[func->put_vtbl_off])(iface,access(v)); \ 1018 FIXME(
"Unimplemented vt %d\n",
func->prop_vt);
1022 IUnknown_Release(iface);
1033 unsigned i, nconv = 0;
1037 if(dp->cNamedArgs) {
1038 FIXME(
"Named arguments not supported\n");
1042 if(dp->cArgs !=
func->argc) {
1043 FIXME(
"Invalid argument count (expected %u, got %u)\n",
func->argc, dp->cArgs);
1051 for(
i=0;
i <
func->argc;
i++) {
1052 arg = dp->rgvarg+dp->cArgs-
i-1;
1059 arg_ptrs[
i] = arg_buf + nconv++;
1068 arg_ptrs[
func->argc] = &ret_ref;
1071 switch(
func->prop_vt) {
1072 #define CASE_VT(vt,type,access) \ 1074 V_BYREF(&ret_ref) = &access(&retv); \ 1090 IUnknown_Release(iface);
1114 if(
This->dynamic_data &&
This->dynamic_data->func_disps
1115 &&
This->dynamic_data->func_disps[
func->func_disp_idx].func_obj) {
1125 FIXME(
"Calling null\n");
1134 if(
func->call_vtbl_off)
1142 if(
func->id == DISPID_VALUE) {
1164 if(dp->cArgs != 1 || (dp->cNamedArgs == 1 && *dp->rgdispidNamedArgs != DISPID_PROPERTYPUT)
1165 || dp->cNamedArgs > 1) {
1166 FIXME(
"invalid args\n");
1207 if(
func->func_disp_idx != -1)
1220 if(!
func->get_vtbl_off) {
1253 FIXME(
"DISPEXPROP_CUSTOM not supported\n");
1260 prop =
This->dynamic_data->props+
idx;
1282 if(
func->func_disp_idx != -1) {
1285 if(!
This->dynamic_data || !
This->dynamic_data->func_disps
1286 || !
This->dynamic_data->func_disps[
func->func_disp_idx].func_obj) {
1291 entry =
This->dynamic_data->func_disps +
func->func_disp_idx;
1329 return IUnknown_QueryInterface(
This->outer,
riid,
ppv);
1336 return IUnknown_AddRef(
This->outer);
1343 return IUnknown_Release(
This->outer);
1362 TRACE(
"(%p)->(%u %u %p)\n",
This, iTInfo, lcid, ppTInfo);
1368 ITypeInfo_AddRef(*ppTInfo);
1383 for(
i=0;
i < cNames;
i++) {
1384 hres = IDispatchEx_GetDispID(&
This->IDispatchEx_iface, rgszNames[
i], 0, rgDispId+
i);
1399 lcid,
wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
1401 return IDispatchEx_InvokeEx(&
This->IDispatchEx_iface, dispIdMember, lcid,
wFlags, pDispParams,
1402 pVarResult, pExcepInfo,
NULL);
1413 if(grfdex & ~(fdexNameCaseSensitive|fdexNameCaseInsensitive|fdexNameEnsure|fdexNameImplicit|
FDEX_VERSION_MASK))
1414 FIXME(
"Unsupported grfdex %x\n", grfdex);
1434 TRACE(
"(%p)->(%x %x %x %p %p %p %p)\n",
This,
id, lcid,
wFlags, pdp, pvarRes, pei, pspCaller);
1441 if(!
This->data->vtbl || !
This->data->vtbl->invoke)
1443 return This->data->vtbl->invoke(
This,
id, lcid,
wFlags, pdp, pvarRes, pei, pspCaller);
1452 prop =
This->dynamic_data->props+
idx;
1472 if(pdp->cArgs != 1 || (pdp->cNamedArgs == 1 && *pdp->rgdispidNamedArgs != DISPID_PROPERTYPUT)
1473 || pdp->cNamedArgs > 1) {
1474 FIXME(
"invalid args\n");
1492 if(
wFlags == DISPATCH_CONSTRUCT) {
1493 if(
id == DISPID_VALUE) {
1494 if(
This->data->vtbl &&
This->data->vtbl->value) {
1495 return This->data->vtbl->value(
This, lcid,
wFlags, pdp, pvarRes, pei, pspCaller);
1497 FIXME(
"DISPATCH_CONSTRUCT flag but missing value function\n");
1500 FIXME(
"DISPATCH_CONSTRUCT flag without DISPID_VALUE\n");
1534 FIXME(
"(%p)->(%x %x %p)\n",
This,
id, grfdexFetch, pgrfdex);
1545 TRACE(
"(%p)->(%x %p)\n",
This,
id, pbstrName);
1591 if(
idx ==
This->dynamic_data->prop_cnt) {
1592 *
pid = DISPID_STARTENUM;
1604 if(
id == DISPID_STARTENUM) {
1615 if(
func->func_disp_idx == -1) {
1627 *
pid = DISPID_STARTENUM;
1659 *
ppv = &
This->IDispatchEx_iface;
1661 *
ppv = &
This->IDispatchEx_iface;
1678 if(!
This->dynamic_data)
1681 for(prop =
This->dynamic_data->props; prop < This->dynamic_data->props +
This->dynamic_data->prop_cnt; prop++) {
1693 if(!
This->dynamic_data)
1696 for(prop =
This->dynamic_data->props; prop < This->dynamic_data->props +
This->dynamic_data->prop_cnt; prop++) {
1710 if(!
This->dynamic_data)
1713 for(prop =
This->dynamic_data->props; prop < This->dynamic_data->props +
This->dynamic_data->prop_cnt; prop++) {
1720 if(
This->dynamic_data->func_disps) {
1723 for(iter =
This->dynamic_data->func_disps; iter < This->dynamic_data->func_disps+
This->data->data->func_disp_cnt; iter++) {
1740 dispex->
outer = outer;
#define DISP_E_UNKNOWNNAME
_In_ ULONG_PTR _In_ ULONG _Out_ ULONG_PTR * pid
HRESULT WINAPI DECLSPEC_HOTPATCH VariantChangeType(VARIANTARG *pvargDest, VARIANTARG *pvargSrc, USHORT wFlags, VARTYPE vt)
void release_typelib(void)
#define DISPATCH_PROPERTYGET
static dispex_static_data_t function_dispex
static HRESULT WINAPI Function_QueryInterface(IUnknown *iface, REFIID riid, void **ppv)
BSTR WINAPI SysAllocStringLen(const OLECHAR *str, unsigned int len)
static dispex_data_t * preprocess_dispex_data(DispatchEx *This)
static HRESULT function_invoke(DispatchEx *This, func_info_t *func, WORD flags, DISPPARAMS *dp, VARIANT *res, EXCEPINFO *ei, IServiceProvider *caller)
HRESULT dispex_get_dynid(DispatchEx *This, const WCHAR *name, DISPID *id)
func_info_t ** name_table
#define BUILTIN_TYPES_SWITCH
static DispatchEx * impl_from_IDispatchEx(IDispatchEx *iface)
#define MSHTML_DISPID_CUSTOM_MIN
#define FDEX_VERSION_MASK
void dispex_unlink(DispatchEx *This)
static HRESULT builtin_propput(DispatchEx *This, func_info_t *func, DISPPARAMS *dp, IServiceProvider *caller)
static int id_cmp(const void *p1, const void *p2)
static const WCHAR objectW[]
static func_disp_t * impl_from_DispatchEx(DispatchEx *iface)
static HRESULT function_value(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS *params, VARIANT *res, EXCEPINFO *ei, IServiceProvider *caller)
#define DISPID_DYNPROP_MAX
static CRITICAL_SECTION_DEBUG cs_dispex_static_data_dbg
static HRESULT WINAPI DispatchEx_DeleteMemberByDispID(IDispatchEx *iface, DISPID id)
void WINAPI VariantInit(VARIANTARG *pVarg)
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
static void * heap_realloc(void *mem, size_t len)
HRESULT dispex_get_dprop_ref(DispatchEx *This, const WCHAR *name, BOOL alloc, VARIANT **ret)
static void * heap_alloc(size_t len)
static HRESULT get_builtin_id(DispatchEx *This, BSTR name, DWORD grfdex, DISPID *ret)
GLsizei GLsizei GLuint * obj
__WINE_SERVER_LIST_INLINE struct list * list_head(const struct list *list)
const char * debugstr_mshtml_guid(const GUID *iid)
__WINE_SERVER_LIST_INLINE void list_add_tail(struct list *list, struct list *elem)
static BOOL is_custom_dispid(DISPID id)
static BOOL is_arg_type_supported(VARTYPE vt)
HRESULT remove_attribute(DispatchEx *This, DISPID id, VARIANT_BOOL *success)
GLenum const GLfloat * params
static HRESULT WINAPI DispatchEx_GetTypeInfo(IDispatchEx *iface, UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo)
static HRESULT WINAPI DispatchEx_GetTypeInfoCount(IDispatchEx *iface, UINT *pctinfo)
static ITypeLib * typelib
static const WCHAR desc[]
static WCHAR * heap_strdupW(const WCHAR *str)
static struct _test_info info[]
void __cdecl qsort(_Inout_updates_bytes_(_NumOfElements *_SizeOfElements) void *_Base, _In_ size_t _NumOfElements, _In_ size_t _SizeOfElements, _In_ int(__cdecl *_PtFuncCompare)(const void *, const void *))
#define InterlockedCompareExchangePointer
static HRESULT WINAPI DispatchEx_GetDispID(IDispatchEx *iface, BSTR bstrName, DWORD grfdex, DISPID *pid)
static HRESULT get_func_obj_entry(DispatchEx *This, func_info_t *func, func_obj_entry_t **ret)
static int func_name_cmp(const void *p1, const void *p2)
static ITypeInfo * typeinfos[LAST_tid]
BSTR WINAPI SysAllocString(LPCOLESTR str)
static HRESULT load_typelib(void)
IDispatchEx IDispatchEx_iface
#define DISPATCH_PROPERTYPUT
static HRESULT WINAPI DispatchEx_DeleteMemberByName(IDispatchEx *iface, BSTR bstrName, DWORD grfdex)
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
static HRESULT invoke_disp_value(DispatchEx *This, IDispatch *func_disp, LCID lcid, WORD flags, DISPPARAMS *dp, VARIANT *res, EXCEPINFO *ei, IServiceProvider *caller)
static HRESULT invoke_builtin_prop(DispatchEx *This, DISPID id, LCID lcid, WORD flags, DISPPARAMS *dp, VARIANT *res, EXCEPINFO *ei, IServiceProvider *caller)
static HRESULT WINAPI DispatchEx_GetNameSpaceParent(IDispatchEx *iface, IUnknown **ppunk)
__WINE_SERVER_LIST_INLINE void list_remove(struct list *elem)
static HRESULT WINAPI DispatchEx_GetMemberName(IDispatchEx *iface, DISPID id, BSTR *pbstrName)
#define BUILTIN_ARG_TYPES_SWITCH
static HRESULT dispex_value(DispatchEx *This, LCID lcid, WORD flags, DISPPARAMS *params, VARIANT *res, EXCEPINFO *ei, IServiceProvider *caller)
dispex_static_data_t * data
void WINAPI DeleteCriticalSection(PCRITICAL_SECTION)
static ULONG WINAPI Function_AddRef(IUnknown *iface)
static HRESULT WINAPI DispatchEx_Invoke(IDispatchEx *iface, DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
static dispex_dynamic_data_t * get_dynamic_data(DispatchEx *This)
#define LOCALE_SYSTEM_DEFAULT
static ULONG WINAPI DispatchEx_Release(IDispatchEx *iface)
static struct __wine_debug_functions funcs
static func_disp_t * impl_from_IUnknown(IUnknown *iface)
#define success(from, fromstr, to, tostr)
static REFPROPVARIANT PROPVAR_CHANGE_FLAGS VARTYPE vt
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
static const tid_t function_iface_tids[]
HRESULT WINAPI DECLSPEC_HOTPATCH VariantClear(VARIANTARG *pVarg)
static IDispatchExVtbl DispatchExVtbl
#define InterlockedDecrement
static void add_func_info(dispex_data_t *data, DWORD *size, tid_t tid, const FUNCDESC *desc, ITypeInfo *dti)
#define memcpy(s1, s2, n)
static int dispid_cmp(const void *p1, const void *p2)
UINT WINAPI SysStringLen(BSTR str)
static HRESULT change_type(VARIANT *dst, VARIANT *src, VARTYPE vt, IServiceProvider *caller)
LIST_ENTRY ProcessLocksList
static BOOL is_dynamic_dispid(DISPID id)
void dispex_traverse(DispatchEx *This, nsCycleCollectionTraversalCallback *cb)
static struct list dispex_data_list
#define DISPATCH_PROPERTYPUTREF
static HRESULT WINAPI DispatchEx_GetMemberProperties(IDispatchEx *iface, DISPID id, DWORD grfdexFetch, DWORD *pgrfdex)
_In_ DWORD _Out_ _In_ WORD wFlags
dispex_prop_type_t get_dispid_type(DISPID id)
#define MSHTML_DISPID_CUSTOM_MAX
dispex_dynamic_data_t * dynamic_data
static HRESULT get_dynamic_prop(DispatchEx *This, const WCHAR *name, DWORD flags, dynamic_prop_t **ret)
HRESULT get_dispids(tid_t tid, DWORD *ret_size, DISPID **ret)
struct stdole::EXCEPINFO EXCEPINFO
__WINE_SERVER_LIST_INLINE int list_empty(const struct list *list)
static const char * debugstr_variant(const VARIANT *var)
static VARIANTARG static DISPID
static dispex_data_t * get_dispex_data(DispatchEx *This)
HRESULT WINAPI LoadRegTypeLib(REFGUID rguid, WORD wVerMajor, WORD wVerMinor, LCID lcid, ITypeLib **ppTLib)
static HRESULT WINAPI DispatchEx_QueryInterface(IDispatchEx *iface, REFIID riid, void **ppv)
#define InterlockedIncrement
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
BOOL dispex_query_interface(DispatchEx *This, REFIID riid, void **ppv)
static HRESULT variant_copy(VARIANT *dest, VARIANT *src)
static const dispex_static_data_vtbl_t function_dispex_vtbl
struct nsCycleCollectionTraversalCallback nsCycleCollectionTraversalCallback
static HRESULT WINAPI DispatchEx_InvokeEx(IDispatchEx *iface, DISPID id, LCID lcid, WORD wFlags, DISPPARAMS *pdp, VARIANT *pvarRes, EXCEPINFO *pei, IServiceProvider *pspCaller)
void WINAPI DECLSPEC_HOTPATCH SysFreeString(BSTR str)
BOOL WINAPI IsEqualGUID(REFGUID rguid1, REFGUID rguid2)
static func_disp_t * create_func_disp(DispatchEx *obj, func_info_t *info)
HRESULT init_dispex(jsdisp_t *dispex, script_ctx_t *ctx, const builtin_info_t *builtin_info, jsdisp_t *prototype)
static HMODULE MODULEINFO DWORD cb
WINE_UNICODE_INLINE int strcmpW(const WCHAR *str1, const WCHAR *str2)
static const WCHAR props[]
struct stdole::DISPPARAMS DISPPARAMS
static HRESULT get_typeinfo(tid_t tid, ITypeInfo **typeinfo)
static HRESULT get_builtin_func(dispex_data_t *data, DISPID id, func_info_t **ret)
static HRESULT builtin_propget(DispatchEx *This, func_info_t *func, DISPPARAMS *dp, VARIANT *res)
static HRESULT WINAPI DispatchEx_GetIDsOfNames(IDispatchEx *iface, REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
static HRESULT typeinfo_invoke(DispatchEx *This, func_info_t *func, WORD flags, DISPPARAMS *dp, VARIANT *res, EXCEPINFO *ei)
func_obj_entry_t * func_disps
static ULONG WINAPI Function_Release(IUnknown *iface)
static HRESULT invoke_builtin_function(DispatchEx *This, func_info_t *func, DISPPARAMS *dp, VARIANT *res, IServiceProvider *caller)
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
HRESULT WINAPI VariantCopy(VARIANTARG *pvargDest, VARIANTARG *pvargSrc)
void release_dispex(DispatchEx *This)
HRESULT WINAPI DispCallFunc(void *pvInstance, ULONG_PTR oVft, CALLCONV cc, VARTYPE vtReturn, UINT cActuals, VARTYPE *prgvt, VARIANTARG **prgpvarg, VARIANT *pvargResult)
static ULONG WINAPI DispatchEx_AddRef(IDispatchEx *iface)
static HRESULT WINAPI DispatchEx_GetNextDispID(IDispatchEx *iface, DWORD grfdex, DISPID id, DISPID *pid)
static CRITICAL_SECTION cs_dispex_static_data
static const IUnknownVtbl FunctionUnkVtbl
static BOOL heap_free(void *mem)
HRESULT get_htmldoc_classinfo(ITypeInfo **typeinfo)