28 0, 0, { (
DWORD_PTR)(__FILE__
": dispex_static_data") }
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++)
384static 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++) {
514 prop->
flags &= ~DYNPROP_DELETED;
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));
781 DISPPARAMS new_dp = {
NULL, &named_arg, 0, 1};
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;
1268 DISPPARAMS dp = {&
var,
NULL,1,0};
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);
1394 VARIANT *pVarResult, EXCEPINFO *pExcepInfo,
UINT *puArgErr)
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");
1484 prop->
flags &= ~DYNPROP_DELETED;
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) {
1613 while(func < data->
funcs+
data->func_cnt) {
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;
static void * heap_alloc(size_t len)
static BOOL heap_free(void *mem)
static void * heap_realloc(void *mem, size_t len)
#define InterlockedIncrement
#define InterlockedDecrement
static void list_remove(struct list_entry *entry)
static int list_empty(struct list_entry *head)
static void list_add_tail(struct list_entry *head, struct list_entry *entry)
static WCHAR * heap_strdupW(const WCHAR *str)
const char * debugstr_mshtml_guid(const GUID *iid)
static REFPROPVARIANT PROPVAR_CHANGE_FLAGS VARTYPE vt
HRESULT WINAPI LoadRegTypeLib(REFGUID rguid, WORD wVerMajor, WORD wVerMinor, LCID lcid, ITypeLib **ppTLib)
HRESULT WINAPI DispCallFunc(void *pvInstance, ULONG_PTR oVft, CALLCONV cc, VARTYPE vtReturn, UINT cActuals, VARTYPE *prgvt, VARIANTARG **prgpvarg, VARIANT *pvargResult)
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLenum const GLfloat * params
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
#define InterlockedCompareExchangePointer
#define FDEX_VERSION_MASK
static HRESULT WINAPI DispatchEx_InvokeEx(IDispatchEx *iface, DISPID id, LCID lcid, WORD wFlags, DISPPARAMS *pdp, VARIANT *pvarRes, EXCEPINFO *pei, IServiceProvider *pspCaller)
static HRESULT WINAPI DispatchEx_GetMemberProperties(IDispatchEx *iface, DISPID id, DWORD grfdexFetch, DWORD *pgrfdex)
static ULONG WINAPI DispatchEx_Release(IDispatchEx *iface)
static HRESULT WINAPI DispatchEx_GetIDsOfNames(IDispatchEx *iface, REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
static HRESULT WINAPI DispatchEx_DeleteMemberByDispID(IDispatchEx *iface, DISPID id)
static HRESULT WINAPI DispatchEx_GetNameSpaceParent(IDispatchEx *iface, IUnknown **ppunk)
static HRESULT WINAPI DispatchEx_GetDispID(IDispatchEx *iface, BSTR bstrName, DWORD grfdex, DISPID *pid)
static HRESULT WINAPI DispatchEx_Invoke(IDispatchEx *iface, DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
static HRESULT WINAPI DispatchEx_GetMemberName(IDispatchEx *iface, DISPID id, BSTR *pbstrName)
static jsdisp_t * impl_from_IDispatchEx(IDispatchEx *iface)
static HRESULT WINAPI DispatchEx_GetNextDispID(IDispatchEx *iface, DWORD grfdex, DISPID id, DISPID *pid)
static HRESULT WINAPI DispatchEx_QueryInterface(IDispatchEx *iface, REFIID riid, void **ppv)
HRESULT init_dispex(jsdisp_t *dispex, script_ctx_t *ctx, const builtin_info_t *builtin_info, jsdisp_t *prototype)
static ULONG WINAPI DispatchEx_AddRef(IDispatchEx *iface)
static HRESULT WINAPI DispatchEx_GetTypeInfo(IDispatchEx *iface, UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo)
static HRESULT WINAPI DispatchEx_DeleteMemberByName(IDispatchEx *iface, BSTR bstrName, DWORD grfdex)
static HRESULT WINAPI DispatchEx_GetTypeInfoCount(IDispatchEx *iface, UINT *pctinfo)
static IDispatchExVtbl DispatchExVtbl
#define memcpy(s1, s2, n)
static const WCHAR desc[]
static const char * debugstr_variant(const VARIANT *var)
static HMODULE MODULEINFO DWORD cb
static VARIANTARG static DISPID
static HRESULT builtin_propput(DispatchEx *This, func_info_t *func, DISPPARAMS *dp, IServiceProvider *caller)
#define DISPID_DYNPROP_MAX
static HRESULT get_dynamic_prop(DispatchEx *This, const WCHAR *name, DWORD flags, dynamic_prop_t **ret)
static dispex_data_t * preprocess_dispex_data(DispatchEx *This)
void release_dispex(DispatchEx *This)
static struct list dispex_data_list
static int func_name_cmp(const void *p1, const void *p2)
void dispex_traverse(DispatchEx *This, nsCycleCollectionTraversalCallback *cb)
static HRESULT variant_copy(VARIANT *dest, VARIANT *src)
static HRESULT get_func_obj_entry(DispatchEx *This, func_info_t *func, func_obj_entry_t **ret)
static CRITICAL_SECTION cs_dispex_static_data
static void add_func_info(dispex_data_t *data, DWORD *size, tid_t tid, const FUNCDESC *desc, ITypeInfo *dti)
void dispex_unlink(DispatchEx *This)
static ITypeLib * typelib
static BOOL is_custom_dispid(DISPID id)
HRESULT remove_attribute(DispatchEx *This, DISPID id, VARIANT_BOOL *success)
#define BUILTIN_TYPES_SWITCH
static HRESULT WINAPI Function_QueryInterface(IUnknown *iface, REFIID riid, void **ppv)
static BOOL is_dynamic_dispid(DISPID id)
static HRESULT get_builtin_func(dispex_data_t *data, DISPID id, func_info_t **ret)
static dispex_static_data_t function_dispex
BOOL dispex_query_interface(DispatchEx *This, REFIID riid, void **ppv)
static HRESULT invoke_builtin_prop(DispatchEx *This, DISPID id, LCID lcid, WORD flags, DISPPARAMS *dp, VARIANT *res, EXCEPINFO *ei, IServiceProvider *caller)
static HRESULT invoke_builtin_function(DispatchEx *This, func_info_t *func, DISPPARAMS *dp, VARIANT *res, IServiceProvider *caller)
static HRESULT invoke_disp_value(DispatchEx *This, IDispatch *func_disp, LCID lcid, WORD flags, DISPPARAMS *dp, VARIANT *res, EXCEPINFO *ei, IServiceProvider *caller)
HRESULT get_dispids(tid_t tid, DWORD *ret_size, DISPID **ret)
static int id_cmp(const void *p1, const void *p2)
static HRESULT function_invoke(DispatchEx *This, func_info_t *func, WORD flags, DISPPARAMS *dp, VARIANT *res, EXCEPINFO *ei, IServiceProvider *caller)
static ULONG WINAPI Function_AddRef(IUnknown *iface)
#define BUILTIN_ARG_TYPES_SWITCH
static HRESULT typeinfo_invoke(DispatchEx *This, func_info_t *func, WORD flags, DISPPARAMS *dp, VARIANT *res, EXCEPINFO *ei)
static dispex_dynamic_data_t * get_dynamic_data(DispatchEx *This)
HRESULT dispex_get_dynid(DispatchEx *This, const WCHAR *name, DISPID *id)
static int dispid_cmp(const void *p1, const void *p2)
static ULONG WINAPI Function_Release(IUnknown *iface)
static CRITICAL_SECTION_DEBUG cs_dispex_static_data_dbg
void release_typelib(void)
static HRESULT load_typelib(void)
static HRESULT dispex_value(DispatchEx *This, LCID lcid, WORD flags, DISPPARAMS *params, VARIANT *res, EXCEPINFO *ei, IServiceProvider *caller)
dispex_prop_type_t get_dispid_type(DISPID id)
static HRESULT get_typeinfo(tid_t tid, ITypeInfo **typeinfo)
static HRESULT get_builtin_id(DispatchEx *This, BSTR name, DWORD grfdex, DISPID *ret)
static BOOL is_arg_type_supported(VARTYPE vt)
static func_disp_t * impl_from_IUnknown(IUnknown *iface)
static HRESULT builtin_propget(DispatchEx *This, func_info_t *func, DISPPARAMS *dp, VARIANT *res)
static const WCHAR objectW[]
HRESULT dispex_get_dprop_ref(DispatchEx *This, const WCHAR *name, BOOL alloc, VARIANT **ret)
static func_disp_t * impl_from_DispatchEx(DispatchEx *iface)
static const IUnknownVtbl FunctionUnkVtbl
static const dispex_static_data_vtbl_t function_dispex_vtbl
static HRESULT change_type(VARIANT *dst, VARIANT *src, VARTYPE vt, IServiceProvider *caller)
static dispex_data_t * get_dispex_data(DispatchEx *This)
static HRESULT function_value(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS *params, VARIANT *res, EXCEPINFO *ei, IServiceProvider *caller)
static const tid_t function_iface_tids[]
HRESULT get_htmldoc_classinfo(ITypeInfo **typeinfo)
static func_disp_t * create_func_disp(DispatchEx *obj, func_info_t *info)
static ITypeInfo * typeinfos[LAST_tid]
struct nsCycleCollectionTraversalCallback nsCycleCollectionTraversalCallback
#define MSHTML_DISPID_CUSTOM_MIN
#define MSHTML_DISPID_CUSTOM_MAX
#define LOCALE_SYSTEM_DEFAULT
BSTR WINAPI SysAllocString(LPCOLESTR str)
UINT WINAPI SysStringLen(BSTR str)
void WINAPI DECLSPEC_HOTPATCH SysFreeString(BSTR str)
BSTR WINAPI SysAllocStringLen(const OLECHAR *str, unsigned int len)
#define DISPATCH_PROPERTYPUT
#define DISPATCH_PROPERTYGET
#define DISPATCH_PROPERTYPUTREF
#define IsEqualGUID(rguid1, rguid2)
static struct __wine_debug_functions funcs
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 *))
dispex_static_data_t * data
IDispatchEx IDispatchEx_iface
dispex_dynamic_data_t * dynamic_data
LIST_ENTRY ProcessLocksList
func_info_t ** name_table
func_obj_entry_t * func_disps
#define CONTAINING_RECORD(address, type, field)
HRESULT WINAPI DECLSPEC_HOTPATCH VariantChangeType(VARIANTARG *pvargDest, VARIANTARG *pvargSrc, USHORT wFlags, VARTYPE vt)
HRESULT WINAPI DECLSPEC_HOTPATCH VariantClear(VARIANTARG *pVarg)
void WINAPI VariantInit(VARIANTARG *pVarg)
HRESULT WINAPI VariantCopy(VARIANTARG *pvargDest, VARIANTARG *pvargSrc)
static const WCHAR props[]
#define success(from, fromstr, to, tostr)
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
void WINAPI DeleteCriticalSection(PCRITICAL_SECTION)
_In_ DWORD _Out_ _In_ WORD wFlags
_In_ ULONG_PTR _In_ ULONG _Out_ ULONG_PTR * pid
#define DISP_E_UNKNOWNNAME