27 #define FDEX_VERSION_MASK 0xf0000000 31 return id <
This->desc->func_cnt;
40 if(!search_private && !
This->desc->funcs[
i].is_public)
42 if(!
i && !
This->desc->funcs[0].name)
45 if(!
This->desc->funcs[
i].entries[invoke_type]
46 || (!search_private && !
This->desc->funcs[
i].entries[invoke_type]->is_public))
66 for(
i=0;
i <
This->desc->prop_cnt;
i++) {
67 if(!search_private && !
This->desc->props[
i].is_public)
71 *
id =
i +
This->desc->func_cnt;
84 for(
i=0;
i < dp->cNamedArgs;
i++) {
85 if(dp->rgdispidNamedArgs[
i] == DISPID_PROPERTYPUT)
88 if(
i == dp->cNamedArgs) {
89 WARN(
"no value to set\n");
124 WARN(
"called with arguments\n");
142 FIXME(
"Arguments not supported\n");
188 FIXME(
"no invoke/getter\n");
203 FIXME(
"arguments not implemented\n");
211 dp.rgvarg = &put_val;
214 FIXME(
"no letter/setter\n");
229 if(
id >=
This->desc->prop_cnt +
This->desc->func_cnt)
240 if(
This->terminator_ran)
244 if(!
This->desc->class_terminate_id)
260 for(
i=0;
i <
This->desc->array_cnt;
i++) {
261 if(
This->arrays[
i]) {
267 for(
i=0;
i <
This->desc->prop_cnt;
i++)
282 *
ppv = &
This->IDispatchEx_iface;
285 *
ppv = &
This->IDispatchEx_iface;
288 *
ppv = &
This->IDispatchEx_iface;
340 FIXME(
"(%p)->(%u %u %p)\n",
This, iTInfo, lcid, ppTInfo);
361 lcid,
wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
363 return IDispatchEx_InvokeEx(&
This->IDispatchEx_iface, dispIdMember, lcid,
wFlags, pDispParams, pVarResult, pExcepInfo,
NULL);
379 if(grfdex & ~(fdexNameEnsure|fdexNameCaseInsensitive|fdexNameCaseSensitive)) {
380 FIXME(
"unsupported flags %x\n", grfdex);
392 TRACE(
"(%p)->(%x %x %x %p %p %p %p)\n",
This,
id, lcid,
wFlags, pdp, pvarRes, pei, pspCaller);
420 FIXME(
"(%p)->(%x %x %p)\n",
This,
id, grfdexFetch, pgrfdex);
427 FIXME(
"(%p)->(%x %p)\n",
This,
id, pbstrName);
485 if(
desc->array_cnt) {
486 vbdisp->
arrays = heap_alloc_zero(
desc->array_cnt *
sizeof(*vbdisp->
arrays));
490 for(
i=0;
i <
desc->array_cnt;
i++) {
491 if(!
desc->array_descs[
i].dim_cnt)
502 for(
i=0,
j=0;
i <
desc->prop_cnt;
i++) {
503 if(
desc->props[
i].is_array) {
545 return 0 <
id &&
id <=
This->ident_map_cnt ?
This->ident_map+
id-1 :
NULL;
552 if(!
This->ident_map_size) {
556 This->ident_map_size = 4;
557 }
else if(
This->ident_map_cnt ==
This->ident_map_size) {
563 This->ident_map = new_map;
564 This->ident_map_size *= 2;
583 *
ppv = &
This->IDispatchEx_iface;
586 *
ppv = &
This->IDispatchEx_iface;
589 *
ppv = &
This->IDispatchEx_iface;
640 FIXME(
"(%p)->(%u %u %p)\n",
This, iTInfo, lcid, ppTInfo);
654 for(
i=0;
i < cNames;
i++) {
655 hres = IDispatchEx_GetDispID(&
This->IDispatchEx_iface, rgszNames[
i], 0, rgDispId+
i);
669 lcid,
wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
671 return IDispatchEx_InvokeEx(&
This->IDispatchEx_iface, dispIdMember, lcid,
wFlags,
672 pDispParams, pVarResult, pExcepInfo,
NULL);
731 TRACE(
"(%p)->(%x %x %x %p %p %p %p)\n",
This,
id, lcid,
wFlags, pdp, pvarRes, pei, pspCaller);
738 if(
ident->u.var->is_const) {
739 FIXME(
"const not supported\n");
776 FIXME(
"(%p)->(%x %x %p)\n",
This,
id, grfdexFetch, pgrfdex);
783 FIXME(
"(%p)->(%x %p)\n",
This,
id, pbstrName);
864 hres = IDispatch_QueryInterface(disp, &IID_IDispatchEx, (
void**)&dispex);
866 TRACE(
"using IDispatch\n");
867 return IDispatch_GetIDsOfNames(disp, &
IID_NULL, &
name, 1, 0,
id);
870 hres = IDispatchEx_GetDispID(dispex,
name, fdexNameCaseInsensitive,
id);
871 IDispatchEx_Release(dispex);
875 #define RPC_E_SERVER_UNAVAILABLE 0x800706ba 946 memset(&ei, 0,
sizeof(ei));
954 hres = IDispatch_QueryInterface(disp, &IID_IDispatchEx, (
void**)&dispex);
958 TRACE(
"using IDispatch\n");
962 hres = IDispatchEx_InvokeEx(dispex,
id,
ctx->lcid,
flags, dp, retv, &ei,
NULL );
963 IDispatchEx_Release(dispex);
986 hres = IDispatch_QueryInterface(disp, &IID_IDispatchEx, (
void**)&dispex);
989 IDispatchEx_Release(dispex);
993 TRACE(
"using IDispatch\n");
static HRESULT invoke_variant_prop(script_ctx_t *ctx, VARIANT *v, WORD flags, DISPPARAMS *dp, VARIANT *res)
static HRESULT WINAPI DispatchEx_QueryInterface(IDispatchEx *iface, REFIID riid, void **ppv)
#define DISP_E_UNKNOWNNAME
#define VBSE_NAMED_PARAM_NOT_FOUND
_In_ ULONG_PTR _In_ ULONG _Out_ ULONG_PTR * pid
static DISPID ident_to_id(ScriptDisp *This, ident_map_t *ident)
#define VBSE_PATH_FILE_ACCESS
#define VBSE_OLE_NO_PROP_OR_METHOD
#define STG_E_INVALIDNAME
#define DISPATCH_PROPERTYGET
static HRESULT WINAPI DispatchEx_GetMemberName(IDispatchEx *iface, DISPID id, BSTR *pbstrName)
static HRESULT WINAPI ScriptDisp_GetTypeInfo(IDispatchEx *iface, UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo)
#define VBSE_CANT_CREATE_OBJECT
#define VBSE_LOCALE_SETTING_NOT_SUPPORTED
static ULONG WINAPI ScriptDisp_Release(IDispatchEx *iface)
static HRESULT WINAPI ScriptDisp_GetNameSpaceParent(IDispatchEx *iface, IUnknown **ppunk)
WINE_DEFAULT_DEBUG_CHANNEL(vbscript)
#define CO_E_SERVER_EXEC_FAILURE
void collect_objects(script_ctx_t *ctx)
#define DISP_E_MEMBERNOTFOUND
HRESULT WINAPI VariantCopyInd(VARIANT *pvargDest, VARIANTARG *pvargSrc)
#define VBSE_TOO_MANY_FILES
#define FDEX_VERSION_MASK
#define STG_E_NOMOREFILES
#define VBSE_OLE_FILE_NOT_FOUND
#define STG_E_INSUFFICIENTMEMORY
HRESULT get_disp_value(script_ctx_t *ctx, IDispatch *disp, VARIANT *v)
#define VBSE_TYPE_MISMATCH
#define STG_E_TOOMANYOPENFILES
HRESULT disp_get_id(IDispatch *disp, BSTR name, vbdisp_invoke_type_t invoke_type, BOOL search_private, DISPID *id)
static void * heap_realloc(void *mem, size_t len)
#define DISP_E_ARRAYISLOCKED
static void * heap_alloc(size_t len)
#define DISP_E_PARAMNOTFOUND
#define VBSE_ILLEGAL_FUNC_CALL
static HRESULT invoke_vbdisp(vbdisp_t *This, DISPID id, DWORD flags, BOOL extern_caller, DISPPARAMS *params, VARIANT *res)
__WINE_SERVER_LIST_INLINE struct list * list_head(const struct list *list)
static HRESULT WINAPI ScriptDisp_GetMemberProperties(IDispatchEx *iface, DISPID id, DWORD grfdexFetch, DWORD *pgrfdex)
static ULONG WINAPI DispatchEx_AddRef(IDispatchEx *iface)
static HRESULT WINAPI DispatchEx_GetDispID(IDispatchEx *iface, BSTR bstrName, DWORD grfdex, DISPID *pid)
__WINE_SERVER_LIST_INLINE void list_add_tail(struct list *list, struct list *elem)
static HRESULT WINAPI DispatchEx_GetTypeInfoCount(IDispatchEx *iface, UINT *pctinfo)
HRESULT create_vbdisp(const class_desc_t *desc, vbdisp_t **ret)
static HRESULT WINAPI DispatchEx_GetTypeInfo(IDispatchEx *iface, UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo)
HRESULT create_script_disp(script_ctx_t *ctx, ScriptDisp **ret)
GLenum const GLfloat * params
#define VBSE_INVALID_TYPELIB_VARIABLE
#define STG_E_ACCESSDENIED
#define STG_E_PATHNOTFOUND
static IDispatchExVtbl ScriptDispVtbl
#define HRESULT_FACILITY(hr)
static const WCHAR desc[]
static HRESULT get_propput_arg(script_ctx_t *ctx, const DISPPARAMS *dp, WORD flags, VARIANT *v, BOOL *is_owned)
static HRESULT WINAPI DispatchEx_GetMemberProperties(IDispatchEx *iface, DISPID id, DWORD grfdexFetch, DWORD *pgrfdex)
#define DISP_E_NONAMEDARGS
#define TYPE_E_OUTOFBOUNDS
static HRESULT WINAPI DispatchEx_DeleteMemberByName(IDispatchEx *iface, BSTR bstrName, DWORD grfdex)
static HRESULT WINAPI ScriptDisp_Invoke(IDispatchEx *iface, DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
#define VBSE_PERMISSION_DENIED
#define DISP_E_UNKNOWNLCID
#define VBSE_NAMED_ARGS_NOT_SUPPORTED
#define DISPATCH_PROPERTYPUT
#define VBSE_PATH_NOT_FOUND
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)
union _ident_map_t::@570 u
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 GLint GLint j
_In_ ULONG _In_ ULONG_PTR ident
#define MK_E_INVALIDEXTENSION
#define MK_E_CANTOPENFILE
__WINE_SERVER_LIST_INLINE void list_remove(struct list *elem)
#define TYPE_E_DLLFUNCTIONNOTFOUND
#define VBSE_FILE_ALREADY_EXISTS
#define STG_E_SHAREVIOLATION
#define DISP_E_TYPEMISMATCH
static HRESULT WINAPI DispatchEx_GetNameSpaceParent(IDispatchEx *iface, IUnknown **ppunk)
#define TYPE_E_TYPEMISMATCH
static void clean_props(vbdisp_t *This)
static HRESULT WINAPI ScriptDisp_GetMemberName(IDispatchEx *iface, DISPID id, BSTR *pbstrName)
static HRESULT WINAPI DispatchEx_GetIDsOfNames(IDispatchEx *iface, REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
static ScriptDisp * ScriptDisp_from_IDispatchEx(IDispatchEx *iface)
#define STG_E_FILEALREADYEXISTS
#define VBSE_OUT_OF_BOUNDS
struct _vbdisp_t vbdisp_t
static HRESULT WINAPI ScriptDisp_DeleteMemberByName(IDispatchEx *iface, BSTR bstrName, DWORD grfdex)
static HRESULT WINAPI ScriptDisp_GetTypeInfoCount(IDispatchEx *iface, UINT *pctinfo)
static BOOL get_func_id(vbdisp_t *This, const WCHAR *name, vbdisp_invoke_type_t invoke_type, BOOL search_private, DISPID *id)
#define DISP_E_UNKNOWNINTERFACE
#define VBSE_FILE_NOT_FOUND
HRESULT WINAPI SafeArrayDestroy(SAFEARRAY *psa)
static ULONG WINAPI ScriptDisp_AddRef(IDispatchEx *iface)
IDispatchEx IDispatchEx_iface
#define VBSE_FUNC_ARITY_MISMATCH
#define DISP_E_BADVARTYPE
#define VBSE_CANT_CREATE_TMP_FILE
#define STG_E_FILENOTFOUND
HRESULT WINAPI DECLSPEC_HOTPATCH VariantClear(VARIANTARG *pVarg)
static IDispatchExVtbl DispatchExVtbl
#define InterlockedDecrement
static HRESULT WINAPI ScriptDisp_GetIDsOfNames(IDispatchEx *iface, REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
#define DISP_E_PARAMNOTOPTIONAL
#define VBSE_ARRAY_LOCKED
static vbdisp_t * impl_from_IDispatchEx(IDispatchEx *iface)
#define DISPATCH_PROPERTYPUTREF
static IDispatch * script_disp
_In_ DWORD _Out_ _In_ WORD wFlags
static HRESULT WINAPI DispatchEx_GetNextDispID(IDispatchEx *iface, DWORD grfdex, DISPID id, DISPID *pid)
#define VBSE_OUT_OF_MEMORY
static HRESULT WINAPI ScriptDisp_GetNextDispID(IDispatchEx *iface, DWORD grfdex, DISPID id, DISPID *pid)
SAFEARRAY *WINAPI SafeArrayCreate(VARTYPE vt, UINT cDims, SAFEARRAYBOUND *rgsabound)
static ULONG WINAPI DispatchEx_Release(IDispatchEx *iface)
#define VBSE_INVALID_DLL_FUNCTION_NAME
struct stdole::EXCEPINFO EXCEPINFO
const class_desc_t * desc
__WINE_SERVER_LIST_INLINE int list_empty(const struct list *list)
static const char * debugstr_variant(const VARIANT *var)
static VARIANTARG static DISPID
static unsigned arg_cnt(const DISPPARAMS *dp)
#define STG_E_DISKISWRITEPROTECTED
HRESULT vbdisp_get_id(vbdisp_t *This, BSTR name, vbdisp_invoke_type_t invoke_type, BOOL search_private, DISPID *id)
#define REGDB_E_CLASSNOTREG
#define STG_E_LOCKVIOLATION
HRESULT exec_script(HTMLInnerWindow *, const WCHAR *, const WCHAR *, VARIANT *) DECLSPEC_HIDDEN
static HRESULT WINAPI DispatchEx_DeleteMemberByDispID(IDispatchEx *iface, DISPID id)
static HRESULT WINAPI ScriptDisp_GetDispID(IDispatchEx *iface, BSTR bstrName, DWORD grfdex, DISPID *pid)
#define LIST_FOR_EACH_ENTRY_SAFE(cursor, cursor2, list, type, field)
#define InterlockedIncrement
#define MAKE_VBSERROR(code)
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 VBSE_OBJECT_VARIABLE_NOT_SET
#define VBSE_OLE_NOT_SUPPORTED
#define FIELD_OFFSET(t, f)
static HRESULT WINAPI ScriptDisp_InvokeEx(IDispatchEx *iface, DISPID id, LCID lcid, WORD wFlags, DISPPARAMS *pdp, VARIANT *pvarRes, EXCEPINFO *pei, IServiceProvider *pspCaller)
BOOL WINAPI IsEqualGUID(REFGUID rguid1, REFGUID rguid2)
static ident_map_t * add_ident(ScriptDisp *This, const WCHAR *name)
#define DISP_E_BADPARAMCOUNT
static HRESULT WINAPI ScriptDisp_QueryInterface(IDispatchEx *iface, REFIID riid, void **ppv)
HRESULT map_hres(HRESULT hres)
static const WCHAR props[]
struct stdole::DISPPARAMS DISPPARAMS
__WINE_SERVER_LIST_INLINE void list_init(struct list *list)
#define DISP_E_NOTACOLLECTION
#define TYPE_E_CANTCREATETMPFILE
#define VBSE_PARAMETER_NOT_OPTIONAL
static ident_map_t * id_to_ident(ScriptDisp *This, DISPID id)
static HRESULT WINAPI DispatchEx_Invoke(IDispatchEx *iface, DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
#define VBSE_ACTION_NOT_SUPPORTED
HRESULT disp_call(script_ctx_t *ctx, IDispatch *disp, DISPID id, DISPPARAMS *dp, VARIANT *retv)
#define RPC_E_SERVER_UNAVAILABLE
HRESULT disp_propput(script_ctx_t *ctx, IDispatch *disp, DISPID id, WORD flags, DISPPARAMS *dp)
static BOOL heap_free(void *mem)
static BOOL is_func_id(vbdisp_t *This, DISPID id)
static BOOL run_terminator(vbdisp_t *This)
static HRESULT WINAPI ScriptDisp_DeleteMemberByDispID(IDispatchEx *iface, DISPID id)
static HRESULT WINAPI DispatchEx_InvokeEx(IDispatchEx *iface, DISPID id, LCID lcid, WORD wFlags, DISPPARAMS *pdp, VARIANT *pvarRes, EXCEPINFO *pei, IServiceProvider *pspCaller)
GLuint const GLchar * name
static vbdisp_t * unsafe_impl_from_IDispatch(IDispatch *iface)
#define VBSE_SERVER_NOT_FOUND