ReactOS  0.4.15-dev-1384-g878186b
dispex.c File Reference
#include "config.h"
#include <stdarg.h>
#include "windef.h"
#include "winbase.h"
#include "winuser.h"
#include "winnls.h"
#include "ole2.h"
#include "msxml6.h"
#include "msxml6did.h"
#include "wininet.h"
#include "urlmon.h"
#include "winreg.h"
#include "shlwapi.h"
#include "wine/debug.h"
#include "wine/unicode.h"
#include "msxml_private.h"
Include dependency graph for dispex.c:

Go to the source code of this file.

Classes

struct  tid_id_t
 
struct  lib_id_t
 
struct  func_info_t
 
struct  dispex_data_t
 

Macros

#define COBJMACROS
 

Enumerations

enum  lib_version_t { LibXml = 0, LibXml2, LibXml_Last }
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (msxml)
 
const IIDget_riid_from_tid (tid_t tid)
 
static unsigned get_libid_from_tid (tid_t tid)
 
static HRESULT get_typelib (unsigned lib, ITypeLib **tl)
 
HRESULT get_typeinfo (enum tid_t tid, ITypeInfo **typeinfo)
 
void release_typelib (void)
 
static void add_func_info (dispex_data_t *data, DWORD *size, tid_t tid, DISPID id, ITypeInfo *dti)
 
static int dispid_cmp (const void *p1, const void *p2)
 
static int func_name_cmp (const void *p1, const void *p2)
 
static dispex_data_tpreprocess_dispex_data (DispatchEx *This)
 
static dispex_data_tget_dispex_data (DispatchEx *This)
 
static DispatchEximpl_from_IDispatchEx (IDispatchEx *iface)
 
static HRESULT WINAPI DispatchEx_QueryInterface (IDispatchEx *iface, REFIID riid, void **ppv)
 
static ULONG WINAPI DispatchEx_AddRef (IDispatchEx *iface)
 
static ULONG WINAPI DispatchEx_Release (IDispatchEx *iface)
 
static HRESULT WINAPI DispatchEx_GetTypeInfoCount (IDispatchEx *iface, UINT *pctinfo)
 
static HRESULT WINAPI DispatchEx_GetTypeInfo (IDispatchEx *iface, UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo)
 
static HRESULT WINAPI DispatchEx_GetIDsOfNames (IDispatchEx *iface, REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
 
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_GetDispID (IDispatchEx *iface, BSTR bstrName, DWORD grfdex, DISPID *pid)
 
static BOOL is_propputref_id (DISPID id)
 
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_DeleteMemberByName (IDispatchEx *iface, BSTR bstrName, DWORD grfdex)
 
static HRESULT WINAPI DispatchEx_DeleteMemberByDispID (IDispatchEx *iface, DISPID id)
 
static HRESULT WINAPI DispatchEx_GetMemberProperties (IDispatchEx *iface, DISPID id, DWORD grfdexFetch, DWORD *pgrfdex)
 
static HRESULT WINAPI DispatchEx_GetMemberName (IDispatchEx *iface, DISPID id, BSTR *pbstrName)
 
static HRESULT WINAPI DispatchEx_GetNextDispID (IDispatchEx *iface, DWORD grfdex, DISPID id, DISPID *pid)
 
static HRESULT WINAPI DispatchEx_GetNameSpaceParent (IDispatchEx *iface, IUnknown **ppunk)
 
BOOL dispex_query_interface (DispatchEx *This, REFIID riid, void **ppv)
 
void init_dispex (DispatchEx *dispex, IUnknown *outer, dispex_static_data_t *data)
 

Variables

static CRITICAL_SECTION cs_dispex_static_data = { &cs_dispex_static_data_dbg, -1, 0, 0, 0, 0 }
 
static CRITICAL_SECTION_DEBUG cs_dispex_static_data_dbg
 
static struct list dispex_data_list = LIST_INIT(dispex_data_list)
 
static ITypeLibtypelib [LibXml_Last]
 
static ITypeInfotypeinfos [LAST_tid]
 
static lib_id_t lib_ids []
 
static tid_id_t tid_ids []
 
static IDispatchExVtbl DispatchExVtbl
 

Macro Definition Documentation

◆ COBJMACROS

#define COBJMACROS

Definition at line 19 of file dispex.c.

Enumeration Type Documentation

◆ lib_version_t

Enumerator
LibXml 
LibXml2 
LibXml_Last 

Definition at line 58 of file dispex.c.

59 {
60  LibXml = 0,
61  LibXml2,
63 };
Definition: dispex.c:60
Definition: dispex.c:61

Function Documentation

◆ add_func_info()

static void add_func_info ( dispex_data_t data,
DWORD size,
tid_t  tid,
DISPID  id,
ITypeInfo dti 
)
static

Definition at line 234 of file dispex.c.

235 {
236  HRESULT hres;
237 
238  if(data->func_cnt && data->funcs[data->func_cnt-1].id == id)
239  return;
240 
241  if(data->func_cnt == *size)
242  data->funcs = heap_realloc(data->funcs, (*size <<= 1)*sizeof(func_info_t));
243 
244  hres = ITypeInfo_GetDocumentation(dti, id, &data->funcs[data->func_cnt].name, NULL, NULL, NULL);
245  if(FAILED(hres))
246  return;
247 
248  data->funcs[data->func_cnt].id = id;
249  data->funcs[data->func_cnt].tid = tid;
250 
251  data->func_cnt++;
252 }
static void * heap_realloc(void *mem, size_t len)
Definition: appwiz.h:70
GLsizeiptr size
Definition: glext.h:5919
HRESULT hres
Definition: protocol.c:465
LONG HRESULT
Definition: typedefs.h:79
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
#define NULL
Definition: types.h:112
GLenum GLuint id
Definition: glext.h:5579
static TfClientId tid

Referenced by preprocess_dispex_data().

◆ DispatchEx_AddRef()

static ULONG WINAPI DispatchEx_AddRef ( IDispatchEx *  iface)
static

Definition at line 354 of file dispex.c.

355 {
357 
358  return IUnknown_AddRef(This->outer);
359 }
static DispatchEx * impl_from_IDispatchEx(IDispatchEx *iface)
Definition: dispex.c:342

◆ DispatchEx_DeleteMemberByDispID()

static HRESULT WINAPI DispatchEx_DeleteMemberByDispID ( IDispatchEx *  iface,
DISPID  id 
)
static

Definition at line 569 of file dispex.c.

570 {
572  TRACE("Not implemented in native msxml3 (%p)->(%x)\n", This, id);
573  return E_NOTIMPL;
574 }
static DispatchEx * impl_from_IDispatchEx(IDispatchEx *iface)
Definition: dispex.c:342
#define TRACE(s)
Definition: solgame.cpp:4
#define E_NOTIMPL
Definition: ddrawi.h:99

◆ DispatchEx_DeleteMemberByName()

static HRESULT WINAPI DispatchEx_DeleteMemberByName ( IDispatchEx *  iface,
BSTR  bstrName,
DWORD  grfdex 
)
static

Definition at line 562 of file dispex.c.

563 {
565  TRACE("Not implemented in native msxml3 (%p)->(%s %x)\n", This, debugstr_w(bstrName), grfdex);
566  return E_NOTIMPL;
567 }
#define debugstr_w
Definition: kernel32.h:32
static DispatchEx * impl_from_IDispatchEx(IDispatchEx *iface)
Definition: dispex.c:342
#define TRACE(s)
Definition: solgame.cpp:4
#define E_NOTIMPL
Definition: ddrawi.h:99

◆ DispatchEx_GetDispID()

static HRESULT WINAPI DispatchEx_GetDispID ( IDispatchEx *  iface,
BSTR  bstrName,
DWORD  grfdex,
DISPID pid 
)
static

Definition at line 421 of file dispex.c.

422 {
425  int min, max, n, c;
426 
427  TRACE("(%p)->(%s %x %p)\n", This, debugstr_w(bstrName), grfdex, pid);
428 
429  if(grfdex & ~(fdexNameCaseSensitive|fdexNameEnsure|fdexNameImplicit))
430  FIXME("Unsupported grfdex %x\n", grfdex);
431 
433  if(!data)
434  return E_FAIL;
435 
436  min = 0;
437  max = data->func_cnt-1;
438 
439  while(min <= max) {
440  n = (min+max)/2;
441 
442  c = strcmpiW(data->name_table[n]->name, bstrName);
443  if(!c) {
444  if((grfdex & fdexNameCaseSensitive) && strcmpW(data->name_table[n]->name, bstrName))
445  break;
446 
447  *pid = data->name_table[n]->id;
448  return S_OK;
449  }
450 
451  if(c > 0)
452  max = n-1;
453  else
454  min = n+1;
455  }
456 
457  if(This->data->vtbl && This->data->vtbl->get_dispid) {
458  HRESULT hres;
459 
460  hres = This->data->vtbl->get_dispid(This->outer, bstrName, grfdex, pid);
461  if(hres != DISP_E_UNKNOWNNAME)
462  return hres;
463  }
464 
465  TRACE("not found %s\n", debugstr_w(bstrName));
466  return DISP_E_UNKNOWNNAME;
467 }
#define DISP_E_UNKNOWNNAME
Definition: winerror.h:2515
_In_ ULONG_PTR _In_ ULONG _Out_ ULONG_PTR * pid
Definition: winddi.h:3835
#define max(a, b)
Definition: svc.c:63
GLdouble n
Definition: glext.h:7729
#define E_FAIL
Definition: ddrawi.h:102
#define debugstr_w
Definition: kernel32.h:32
#define FIXME(fmt,...)
Definition: debug.h:111
static DispatchEx * impl_from_IDispatchEx(IDispatchEx *iface)
Definition: dispex.c:342
#define TRACE(s)
Definition: solgame.cpp:4
HRESULT hres
Definition: protocol.c:465
LONG HRESULT
Definition: typedefs.h:79
const GLubyte * c
Definition: glext.h:8905
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
static dispex_data_t * get_dispex_data(DispatchEx *This)
Definition: dispex.c:327
#define strcmpiW(s1, s2)
Definition: unicode.h:39
#define S_OK
Definition: intsafe.h:51
#define min(a, b)
Definition: monoChain.cc:55
WINE_UNICODE_INLINE int strcmpW(const WCHAR *str1, const WCHAR *str2)
Definition: unicode.h:229
#define c
Definition: ke_i.h:80

◆ DispatchEx_GetIDsOfNames()

static HRESULT WINAPI DispatchEx_GetIDsOfNames ( IDispatchEx *  iface,
REFIID  riid,
LPOLESTR rgszNames,
UINT  cNames,
LCID  lcid,
DISPID rgDispId 
)
static

Definition at line 388 of file dispex.c.

391 {
393  UINT i;
394  HRESULT hres;
395 
396  TRACE("(%p)->(%s %p %u %u %p)\n", This, debugstr_guid(riid), rgszNames, cNames,
397  lcid, rgDispId);
398 
399  for(i=0; i < cNames; i++) {
400  hres = IDispatchEx_GetDispID(&This->IDispatchEx_iface, rgszNames[i], 0, rgDispId+i);
401  if(FAILED(hres))
402  return hres;
403  }
404 
405  return S_OK;
406 }
REFIID riid
Definition: precomp.h:44
#define debugstr_guid
Definition: kernel32.h:35
static DispatchEx * impl_from_IDispatchEx(IDispatchEx *iface)
Definition: dispex.c:342
#define TRACE(s)
Definition: solgame.cpp:4
HRESULT hres
Definition: protocol.c:465
LONG HRESULT
Definition: typedefs.h:79
#define S_OK
Definition: intsafe.h:51
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
Definition: glfuncs.h:248
unsigned int UINT
Definition: ndis.h:50

◆ DispatchEx_GetMemberName()

static HRESULT WINAPI DispatchEx_GetMemberName ( IDispatchEx *  iface,
DISPID  id,
BSTR pbstrName 
)
static

Definition at line 583 of file dispex.c.

584 {
586  TRACE("Not implemented in native msxml3 (%p)->(%x %p)\n", This, id, pbstrName);
587  return E_NOTIMPL;
588 }
static DispatchEx * impl_from_IDispatchEx(IDispatchEx *iface)
Definition: dispex.c:342
#define TRACE(s)
Definition: solgame.cpp:4
#define E_NOTIMPL
Definition: ddrawi.h:99

◆ DispatchEx_GetMemberProperties()

static HRESULT WINAPI DispatchEx_GetMemberProperties ( IDispatchEx *  iface,
DISPID  id,
DWORD  grfdexFetch,
DWORD pgrfdex 
)
static

Definition at line 576 of file dispex.c.

577 {
579  TRACE("Not implemented in native msxml3 (%p)->(%x %x %p)\n", This, id, grfdexFetch, pgrfdex);
580  return E_NOTIMPL;
581 }
static DispatchEx * impl_from_IDispatchEx(IDispatchEx *iface)
Definition: dispex.c:342
#define TRACE(s)
Definition: solgame.cpp:4
#define E_NOTIMPL
Definition: ddrawi.h:99

◆ DispatchEx_GetNameSpaceParent()

static HRESULT WINAPI DispatchEx_GetNameSpaceParent ( IDispatchEx *  iface,
IUnknown **  ppunk 
)
static

Definition at line 597 of file dispex.c.

598 {
600  TRACE("Not implemented in native msxml3 (%p)->(%p)\n", This, ppunk);
601  return E_NOTIMPL;
602 }
static DispatchEx * impl_from_IDispatchEx(IDispatchEx *iface)
Definition: dispex.c:342
#define TRACE(s)
Definition: solgame.cpp:4
#define E_NOTIMPL
Definition: ddrawi.h:99

◆ DispatchEx_GetNextDispID()

static HRESULT WINAPI DispatchEx_GetNextDispID ( IDispatchEx *  iface,
DWORD  grfdex,
DISPID  id,
DISPID pid 
)
static

Definition at line 590 of file dispex.c.

591 {
593  TRACE(" Not implemented in native msxml3 (%p)->(%x %x %p)\n", This, grfdex, id, pid);
594  return E_NOTIMPL;
595 }
_In_ ULONG_PTR _In_ ULONG _Out_ ULONG_PTR * pid
Definition: winddi.h:3835
static DispatchEx * impl_from_IDispatchEx(IDispatchEx *iface)
Definition: dispex.c:342
#define TRACE(s)
Definition: solgame.cpp:4
#define E_NOTIMPL
Definition: ddrawi.h:99

◆ DispatchEx_GetTypeInfo()

static HRESULT WINAPI DispatchEx_GetTypeInfo ( IDispatchEx *  iface,
UINT  iTInfo,
LCID  lcid,
ITypeInfo **  ppTInfo 
)
static

Definition at line 378 of file dispex.c.

380 {
382 
383  TRACE("(%p)->(%u %u %p)\n", This, iTInfo, lcid, ppTInfo);
384 
385  return get_typeinfo(This->data->disp_tid, ppTInfo);
386 }
static DispatchEx * impl_from_IDispatchEx(IDispatchEx *iface)
Definition: dispex.c:342
#define TRACE(s)
Definition: solgame.cpp:4
HRESULT get_typeinfo(enum tid_t tid, ITypeInfo **typeinfo)
Definition: dispex.c:172

◆ DispatchEx_GetTypeInfoCount()

static HRESULT WINAPI DispatchEx_GetTypeInfoCount ( IDispatchEx *  iface,
UINT pctinfo 
)
static

Definition at line 368 of file dispex.c.

369 {
371 
372  TRACE("(%p)->(%p)\n", This, pctinfo);
373 
374  *pctinfo = 1;
375  return S_OK;
376 }
static DispatchEx * impl_from_IDispatchEx(IDispatchEx *iface)
Definition: dispex.c:342
#define TRACE(s)
Definition: solgame.cpp:4
#define S_OK
Definition: intsafe.h:51

◆ DispatchEx_Invoke()

static HRESULT WINAPI DispatchEx_Invoke ( IDispatchEx *  iface,
DISPID  dispIdMember,
REFIID  riid,
LCID  lcid,
WORD  wFlags,
DISPPARAMS *  pDispParams,
VARIANT pVarResult,
EXCEPINFO *  pExcepInfo,
UINT puArgErr 
)
static

Definition at line 408 of file dispex.c.

411 {
413 
414  TRACE("(%p)->(%x %s %x %x %p %p %p %p)\n", This, dispIdMember, debugstr_guid(riid),
415  lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
416 
417  return IDispatchEx_InvokeEx(&This->IDispatchEx_iface, dispIdMember, lcid, wFlags,
418  pDispParams, pVarResult, pExcepInfo, NULL);
419 }
REFIID riid
Definition: precomp.h:44
#define debugstr_guid
Definition: kernel32.h:35
static DispatchEx * impl_from_IDispatchEx(IDispatchEx *iface)
Definition: dispex.c:342
#define TRACE(s)
Definition: solgame.cpp:4
_In_ DWORD _Out_ _In_ WORD wFlags
Definition: wincon.h:534
#define NULL
Definition: types.h:112

◆ DispatchEx_InvokeEx()

static HRESULT WINAPI DispatchEx_InvokeEx ( IDispatchEx *  iface,
DISPID  id,
LCID  lcid,
WORD  wFlags,
DISPPARAMS *  pdp,
VARIANT pvarRes,
EXCEPINFO *  pei,
IServiceProvider pspCaller 
)
static

Definition at line 493 of file dispex.c.

495 {
497  IUnknown *unk;
498  ITypeInfo *ti;
500  UINT argerr=0;
501  int min, max, n;
502  HRESULT hres;
503 
504  TRACE("(%p)->(%x %x %x %p %p %p %p)\n", This, id, lcid, wFlags, pdp, pvarRes, pei, pspCaller);
505 
506  if(This->data->vtbl && This->data->vtbl->invoke) {
507  hres = This->data->vtbl->invoke(This->outer, id, lcid, wFlags, pdp, pvarRes, pei);
508  if (hres != DISP_E_UNKNOWNNAME) return hres;
509  }
510 
511  if(wFlags == DISPATCH_CONSTRUCT) {
512  FIXME("DISPATCH_CONSTRUCT not implemented\n");
513  return E_NOTIMPL;
514  }
515 
517  if(!data)
518  return E_FAIL;
519 
520  min = 0;
521  max = data->func_cnt-1;
522 
523  while(min <= max) {
524  n = (min+max)/2;
525 
526  if(data->funcs[n].id == id)
527  break;
528 
529  if(data->funcs[n].id < id)
530  min = n+1;
531  else
532  max = n-1;
533  }
534 
535  if(min > max) {
536  WARN("invalid id %x\n", id);
537  return DISP_E_UNKNOWNNAME;
538  }
539 
540  hres = get_typeinfo(data->funcs[n].tid, &ti);
541  if(FAILED(hres)) {
542  ERR("Could not get type info: %08x\n", hres);
543  return hres;
544  }
545 
546  hres = IUnknown_QueryInterface(This->outer, get_riid_from_tid(data->funcs[n].tid), (void**)&unk);
547  if(FAILED(hres)) {
548  ERR("Could not get iface: %08x\n", hres);
549  ITypeInfo_Release(ti);
550  return E_FAIL;
551  }
552 
555  hres = ITypeInfo_Invoke(ti, unk, id, wFlags, pdp, pvarRes, pei, &argerr);
556 
557  ITypeInfo_Release(ti);
558  IUnknown_Release(unk);
559  return hres;
560 }
#define DISP_E_UNKNOWNNAME
Definition: winerror.h:2515
#define max(a, b)
Definition: svc.c:63
#define WARN(fmt,...)
Definition: debug.h:112
GLdouble n
Definition: glext.h:7729
#define E_FAIL
Definition: ddrawi.h:102
#define FIXME(fmt,...)
Definition: debug.h:111
static DispatchEx * impl_from_IDispatchEx(IDispatchEx *iface)
Definition: dispex.c:342
#define DISPATCH_PROPERTYPUT
Definition: oleauto.h:1008
#define TRACE(s)
Definition: solgame.cpp:4
HRESULT hres
Definition: protocol.c:465
LONG HRESULT
Definition: typedefs.h:79
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
static dispex_data_t * get_dispex_data(DispatchEx *This)
Definition: dispex.c:327
#define DISPATCH_PROPERTYPUTREF
Definition: oleauto.h:1009
HRESULT get_typeinfo(enum tid_t tid, ITypeInfo **typeinfo)
Definition: dispex.c:172
_In_ DWORD _Out_ _In_ WORD wFlags
Definition: wincon.h:534
#define ERR(fmt,...)
Definition: debug.h:110
const IID * get_riid_from_tid(tid_t tid)
Definition: dispex.c:143
#define E_NOTIMPL
Definition: ddrawi.h:99
#define min(a, b)
Definition: monoChain.cc:55
unsigned int UINT
Definition: ndis.h:50
static BOOL is_propputref_id(DISPID id)
Definition: dispex.c:469

◆ DispatchEx_QueryInterface()

static HRESULT WINAPI DispatchEx_QueryInterface ( IDispatchEx *  iface,
REFIID  riid,
void **  ppv 
)
static

Definition at line 347 of file dispex.c.

348 {
350 
351  return IUnknown_QueryInterface(This->outer, riid, ppv);
352 }
REFIID riid
Definition: precomp.h:44
REFIID LPVOID * ppv
Definition: atlbase.h:39
static DispatchEx * impl_from_IDispatchEx(IDispatchEx *iface)
Definition: dispex.c:342

◆ DispatchEx_Release()

static ULONG WINAPI DispatchEx_Release ( IDispatchEx *  iface)
static

Definition at line 361 of file dispex.c.

362 {
364 
365  return IUnknown_Release(This->outer);
366 }
static DispatchEx * impl_from_IDispatchEx(IDispatchEx *iface)
Definition: dispex.c:342

◆ dispex_query_interface()

BOOL dispex_query_interface ( DispatchEx This,
REFIID  riid,
void **  ppv 
)

Definition at line 622 of file dispex.c.

623 {
624  static const IID IID_UndocumentedScriptIface =
625  {0x719c3050,0xf9d3,0x11cf,{0xa4,0x93,0x00,0x40,0x05,0x23,0xa8,0xa0}};
626  static const IID IID_IDispatchJS =
627  {0x719c3050,0xf9d3,0x11cf,{0xa4,0x93,0x00,0x40,0x05,0x23,0xa8,0xa6}};
628 
630  TRACE("(%p)->(IID_IDispatch %p)\n", This, ppv);
631  *ppv = &This->IDispatchEx_iface;
632  }else if(IsEqualGUID(&IID_IDispatchEx, riid)) {
633  TRACE("(%p)->(IID_IDispatchEx %p)\n", This, ppv);
634  *ppv = &This->IDispatchEx_iface;
635  }else if(IsEqualGUID(&IID_IDispatchJS, riid)) {
636  TRACE("(%p)->(IID_IDispatchJS %p) returning NULL\n", This, ppv);
637  *ppv = NULL;
638  }else if(IsEqualGUID(&IID_UndocumentedScriptIface, riid)) {
639  TRACE("(%p)->(IID_UndocumentedScriptIface %p) returning NULL\n", This, ppv);
640  *ppv = NULL;
641  }else if (IsEqualGUID(&IID_IObjectIdentity, riid)) {
642  TRACE("IID_IObjectIdentity not supported returning NULL\n");
643  *ppv = NULL;
644  }else {
645  return FALSE;
646  }
647 
648  if(*ppv)
649  IUnknown_AddRef((IUnknown*)*ppv);
650  return TRUE;
651 }
#define TRUE
Definition: types.h:120
REFIID riid
Definition: precomp.h:44
REFIID LPVOID * ppv
Definition: atlbase.h:39
#define FALSE
Definition: types.h:117
#define TRACE(s)
Definition: solgame.cpp:4
const GUID IID_IDispatch
#define NULL
Definition: types.h:112
BOOL WINAPI IsEqualGUID(REFGUID rguid1, REFGUID rguid2)
Definition: compobj.c:4112

◆ dispid_cmp()

static int dispid_cmp ( const void p1,
const void p2 
)
static

Definition at line 254 of file dispex.c.

255 {
256  return ((const func_info_t*)p1)->id - ((const func_info_t*)p2)->id;
257 }

Referenced by preprocess_dispex_data().

◆ func_name_cmp()

static int func_name_cmp ( const void p1,
const void p2 
)
static

Definition at line 259 of file dispex.c.

260 {
261  return strcmpiW((*(func_info_t* const*)p1)->name, (*(func_info_t* const*)p2)->name);
262 }
#define strcmpiW(s1, s2)
Definition: unicode.h:39
Definition: name.c:38

Referenced by preprocess_dispex_data().

◆ get_dispex_data()

static dispex_data_t* get_dispex_data ( DispatchEx This)
static

Definition at line 327 of file dispex.c.

328 {
329  if(This->data->data)
330  return This->data->data;
331 
333 
334  if(!This->data->data)
335  This->data->data = preprocess_dispex_data(This);
336 
338 
339  return This->data->data;
340 }
static CRITICAL_SECTION cs_dispex_static_data
Definition: dispex.c:48
static dispex_data_t * preprocess_dispex_data(DispatchEx *This)
Definition: dispex.c:264
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)

Referenced by DispatchEx_GetDispID(), and DispatchEx_InvokeEx().

◆ get_libid_from_tid()

static unsigned get_libid_from_tid ( tid_t  tid)
inlinestatic

Definition at line 148 of file dispex.c.

149 {
150  return tid_ids[tid].lib;
151 }
static tid_id_t tid_ids[]
Definition: dispex.c:99
enum lib_version_t lib
Definition: dispex.c:67
static TfClientId tid

Referenced by get_typeinfo().

◆ get_riid_from_tid()

const IID* get_riid_from_tid ( tid_t  tid)

Definition at line 143 of file dispex.c.

144 {
145  return tid_ids[tid].iid;
146 }
static tid_id_t tid_ids[]
Definition: dispex.c:99
REFIID iid
Definition: dispex.c:66
static TfClientId tid

Referenced by DispatchEx_InvokeEx(), and get_typeinfo().

◆ get_typeinfo()

HRESULT get_typeinfo ( enum tid_t  tid,
ITypeInfo **  typeinfo 
)

Definition at line 172 of file dispex.c.

173 {
174  unsigned lib = get_libid_from_tid(tid);
175  ITypeLib *typelib;
176  HRESULT hres;
177 
178  if (FAILED(hres = get_typelib(lib, &typelib)))
179  return hres;
180 
181  if(!typeinfos[tid]) {
182  ITypeInfo *ti;
183 
184  hres = ITypeLib_GetTypeInfoOfGuid(typelib, get_riid_from_tid(tid), &ti);
185  if(FAILED(hres)) {
186  /* try harder with typelib from msxml.dll */
188  return hres;
189  hres = ITypeLib_GetTypeInfoOfGuid(typelib, get_riid_from_tid(tid), &ti);
190  if(FAILED(hres)) {
191  ERR("GetTypeInfoOfGuid failed: %08x\n", hres);
192  return hres;
193  }
194  }
195 
197  ITypeInfo_Release(ti);
198  }
199 
200  *typeinfo = typeinfos[tid];
201 
202  ITypeInfo_AddRef(typeinfos[tid]);
203  return S_OK;
204 }
Definition: dispex.c:60
static HRESULT get_typelib(unsigned lib, ITypeLib **tl)
Definition: dispex.c:153
static ITypeLib * typelib[LibXml_Last]
Definition: dispex.c:90
static ITypeInfo * typeinfos[LAST_tid]
Definition: dispex.c:91
#define InterlockedCompareExchangePointer
Definition: interlocked.h:129
HRESULT hres
Definition: protocol.c:465
LONG HRESULT
Definition: typedefs.h:79
#define ERR(fmt,...)
Definition: debug.h:110
#define S_OK
Definition: intsafe.h:51
static unsigned get_libid_from_tid(tid_t tid)
Definition: dispex.c:148
const IID * get_riid_from_tid(tid_t tid)
Definition: dispex.c:143
#define NULL
Definition: types.h:112
static TfClientId tid

Referenced by DispatchEx_GetTypeInfo(), DispatchEx_InvokeEx(), and preprocess_dispex_data().

◆ get_typelib()

static HRESULT get_typelib ( unsigned  lib,
ITypeLib **  tl 
)
static

Definition at line 153 of file dispex.c.

154 {
155  HRESULT hres;
156 
157  if(!typelib[lib]) {
158  hres = LoadRegTypeLib(lib_ids[lib].iid, lib_ids[lib].major, 0, LOCALE_SYSTEM_DEFAULT, tl);
159  if(FAILED(hres)) {
160  ERR("LoadRegTypeLib failed: %08x\n", hres);
161  return hres;
162  }
163 
164  if (InterlockedCompareExchangePointer((void**)&typelib[lib], *tl, NULL))
165  ITypeLib_Release(*tl);
166  }
167 
168  *tl = typelib[lib];
169  return S_OK;
170 }
static ITypeLib * typelib[LibXml_Last]
Definition: dispex.c:90
#define InterlockedCompareExchangePointer
Definition: interlocked.h:129
ULONG major
HRESULT hres
Definition: protocol.c:465
LONG HRESULT
Definition: typedefs.h:79
#define LOCALE_SYSTEM_DEFAULT
#define ERR(fmt,...)
Definition: debug.h:110
#define S_OK
Definition: intsafe.h:51
HRESULT WINAPI LoadRegTypeLib(REFGUID rguid, WORD wVerMajor, WORD wVerMinor, LCID lcid, ITypeLib **ppTLib)
Definition: typelib.c:531
#define NULL
Definition: types.h:112
static lib_id_t lib_ids[]
Definition: dispex.c:94

Referenced by get_typeinfo().

◆ impl_from_IDispatchEx()

static DispatchEx* impl_from_IDispatchEx ( IDispatchEx *  iface)
inlinestatic

Definition at line 342 of file dispex.c.

343 {
344  return CONTAINING_RECORD(iface, DispatchEx, IDispatchEx_iface);
345 }
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)
Definition: Messaging.c:560

Referenced by DispatchEx_AddRef(), DispatchEx_DeleteMemberByDispID(), DispatchEx_DeleteMemberByName(), DispatchEx_GetDispID(), DispatchEx_GetIDsOfNames(), DispatchEx_GetMemberName(), DispatchEx_GetMemberProperties(), DispatchEx_GetNameSpaceParent(), DispatchEx_GetNextDispID(), DispatchEx_GetTypeInfo(), DispatchEx_GetTypeInfoCount(), DispatchEx_Invoke(), DispatchEx_InvokeEx(), DispatchEx_QueryInterface(), and DispatchEx_Release().

◆ init_dispex()

void init_dispex ( DispatchEx dispex,
IUnknown outer,
dispex_static_data_t data 
)

Definition at line 653 of file dispex.c.

654 {
655  dispex->IDispatchEx_iface.lpVtbl = &DispatchExVtbl;
656  dispex->outer = outer;
657  dispex->data = data;
658 }
IDispatchEx IDispatchEx_iface
dispex_static_data_t * data
static IDispatchExVtbl DispatchExVtbl
Definition: dispex.c:604
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
IUnknown * outer

◆ is_propputref_id()

static BOOL is_propputref_id ( DISPID  id)
static

Definition at line 469 of file dispex.c.

470 {
471  switch (id)
472  {
487  return TRUE;
488  default:
489  return FALSE;
490  }
491 }
#define DISPID_DOM_DOCUMENT_DOCUMENTELEMENT
Definition: msxml2did.h:114
#define DISPID_MXXML_FILTER_CONTENTHANDLER
Definition: msxml2did.h:478
#define TRUE
Definition: types.h:120
#define DISPID_XMLDOM_SELECTION_CONTEXT
Definition: msxml2did.h:302
#define DISPID_MXXML_FILTER_DTDHANDLER
Definition: msxml2did.h:479
#define DISPID_SAX_CONTENTHANDLER_DOCUMENTLOCATOR
Definition: msxml2did.h:381
#define FALSE
Definition: types.h:117
#define DISPID_XMLDOM_TEMPLATE_STYLESHEET
Definition: msxml2did.h:313
#define DISPID_SAX_XMLREADER_ENTITYRESOLVER
Definition: msxml2did.h:346
#define DISPID_MXXML_FILTER_ENTITYRESOLVER
Definition: msxml2did.h:480
#define DISPID_SAX_XMLREADER_CONTENTHANDLER
Definition: msxml2did.h:347
#define DISPID_XMLDOM_DOCUMENT2_SCHEMAS
Definition: msxml2did.h:280
#define DISPID_SAX_XMLREADER_DTDHANDLER
Definition: msxml2did.h:348
#define DISPID_SAX_XMLFILTER_PARENT
Definition: msxml2did.h:369
#define DISPID_MXXML_FILTER_ERRORHANDLER
Definition: msxml2did.h:481
#define DISPID_SAX_XMLREADER_ERRORHANDLER
Definition: msxml2did.h:349

Referenced by DispatchEx_InvokeEx().

◆ preprocess_dispex_data()

static dispex_data_t* preprocess_dispex_data ( DispatchEx This)
static

Definition at line 264 of file dispex.c.

265 {
266  const tid_t *tid = This->data->iface_tids;
267  FUNCDESC *funcdesc;
269  DWORD size = 16, i;
270  ITypeInfo *ti, *dti;
271  HRESULT hres;
272 
273  TRACE("(%p)\n", This);
274 
275  hres = get_typeinfo(This->data->disp_tid, &dti);
276  if(FAILED(hres)) {
277  ERR("Could not get disp type info: %08x\n", hres);
278  return NULL;
279  }
280 
281  data = heap_alloc(sizeof(dispex_data_t));
282  data->func_cnt = 0;
283  data->funcs = heap_alloc(size*sizeof(func_info_t));
285 
286  while(*tid) {
287  hres = get_typeinfo(*tid, &ti);
288  if(FAILED(hres))
289  break;
290 
291  i=0;
292  while(1) {
293  hres = ITypeInfo_GetFuncDesc(ti, i++, &funcdesc);
294  if(FAILED(hres))
295  break;
296 
297  add_func_info(data, &size, *tid, funcdesc->memid, dti);
298  ITypeInfo_ReleaseFuncDesc(ti, funcdesc);
299  }
300 
301  ITypeInfo_Release(ti);
302  tid++;
303  }
304 
305  if(!data->func_cnt) {
306  heap_free(data->funcs);
307  data->funcs = NULL;
308  }else if(data->func_cnt != size) {
309  data->funcs = heap_realloc(data->funcs, data->func_cnt * sizeof(func_info_t));
310  }
311 
312  qsort(data->funcs, data->func_cnt, sizeof(func_info_t), dispid_cmp);
313 
314  if(data->funcs) {
315  data->name_table = heap_alloc(data->func_cnt * sizeof(func_info_t*));
316  for(i=0; i < data->func_cnt; i++)
317  data->name_table[i] = data->funcs+i;
318  qsort(data->name_table, data->func_cnt, sizeof(func_info_t*), func_name_cmp);
319  }else {
320  data->name_table = NULL;
321  }
322 
323  ITypeInfo_Release(dti);
324  return data;
325 }
static int func_name_cmp(const void *p1, const void *p2)
Definition: dispex.c:259
tid_t
Definition: ieframe.h:311
static void add_func_info(dispex_data_t *data, DWORD *size, tid_t tid, DISPID id, ITypeInfo *dti)
Definition: dispex.c:234
static void * heap_realloc(void *mem, size_t len)
Definition: appwiz.h:70
static void * heap_alloc(size_t len)
Definition: appwiz.h:65
__WINE_SERVER_LIST_INLINE void list_add_tail(struct list *list, struct list *elem)
Definition: list.h:102
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 TRACE(s)
Definition: solgame.cpp:4
GLsizeiptr size
Definition: glext.h:5919
HRESULT hres
Definition: protocol.c:465
LONG HRESULT
Definition: typedefs.h:79
unsigned long DWORD
Definition: ntddk_ex.h:95
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
HRESULT get_typeinfo(enum tid_t tid, ITypeInfo **typeinfo)
Definition: dispex.c:172
#define ERR(fmt,...)
Definition: debug.h:110
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
Definition: glfuncs.h:248
#define NULL
Definition: types.h:112
static int dispid_cmp(const void *p1, const void *p2)
Definition: dispex.c:254
static struct list dispex_data_list
Definition: dispex.c:89
static TfClientId tid
static BOOL heap_free(void *mem)
Definition: appwiz.h:75

Referenced by get_dispex_data().

◆ release_typelib()

void release_typelib ( void  )

Definition at line 206 of file dispex.c.

207 {
208  dispex_data_t *iter;
209  unsigned i;
210 
211  while(!list_empty(&dispex_data_list)) {
213  list_remove(&iter->entry);
214 
215  for(i=0; i < iter->func_cnt; i++)
216  SysFreeString(iter->funcs[i].name);
217 
218  heap_free(iter->funcs);
219  heap_free(iter->name_table);
220  heap_free(iter);
221  }
222 
223  for(i=0; i < ARRAY_SIZE(typeinfos); i++)
224  if(typeinfos[i])
225  ITypeInfo_Release(typeinfos[i]);
226 
227  for(i=0; i < ARRAY_SIZE(typelib); i++)
228  if(typelib[i])
229  ITypeLib_Release(typelib[i]);
230 
232 }
static CRITICAL_SECTION cs_dispex_static_data
Definition: dispex.c:48
func_info_t ** name_table
Definition: dispex.c:51
static ITypeLib * typelib[LibXml_Last]
Definition: dispex.c:90
__WINE_SERVER_LIST_INLINE struct list * list_head(const struct list *list)
Definition: list.h:131
static ITypeInfo * typeinfos[LAST_tid]
Definition: dispex.c:91
DWORD func_cnt
Definition: dispex.c:49
__WINE_SERVER_LIST_INLINE void list_remove(struct list *elem)
Definition: list.h:108
void WINAPI DeleteCriticalSection(PCRITICAL_SECTION)
BSTR name
Definition: dispex.c:37
func_info_t * funcs
Definition: dispex.c:50
uint32_t entry
Definition: isohybrid.c:63
__WINE_SERVER_LIST_INLINE int list_empty(const struct list *list)
Definition: list.h:143
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
Definition: glfuncs.h:248
#define ARRAY_SIZE(a)
Definition: main.h:24
struct list entry
Definition: dispex.c:54
void WINAPI DECLSPEC_HOTPATCH SysFreeString(BSTR str)
Definition: oleaut.c:271
static struct list dispex_data_list
Definition: dispex.c:89
#define LIST_ENTRY(type)
Definition: queue.h:175
static BOOL heap_free(void *mem)
Definition: appwiz.h:75

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( msxml  )

Variable Documentation

◆ cs_dispex_static_data

static CRITICAL_SECTION cs_dispex_static_data = { &cs_dispex_static_data_dbg, -1, 0, 0, 0, 0 }
static

Definition at line 48 of file dispex.c.

Referenced by get_dispex_data(), and release_typelib().

◆ cs_dispex_static_data_dbg

CRITICAL_SECTION_DEBUG cs_dispex_static_data_dbg
static
Initial value:
=
{
0, 0, { (DWORD_PTR)(__FILE__ ": dispex_static_data") }
}
static CRITICAL_SECTION cs_dispex_static_data
Definition: dispex.c:48
#define DWORD_PTR
Definition: treelist.c:76
static CRITICAL_SECTION_DEBUG cs_dispex_static_data_dbg
Definition: dispex.c:49
LIST_ENTRY ProcessLocksList
Definition: winbase.h:861

Definition at line 49 of file dispex.c.

◆ DispatchExVtbl

IDispatchExVtbl DispatchExVtbl
static
Initial value:
= {
}
static HRESULT WINAPI DispatchEx_InvokeEx(IDispatchEx *iface, DISPID id, LCID lcid, WORD wFlags, DISPPARAMS *pdp, VARIANT *pvarRes, EXCEPINFO *pei, IServiceProvider *pspCaller)
Definition: dispex.c:493
static HRESULT WINAPI DispatchEx_GetDispID(IDispatchEx *iface, BSTR bstrName, DWORD grfdex, DISPID *pid)
Definition: dispex.c:421
static HRESULT WINAPI DispatchEx_GetMemberProperties(IDispatchEx *iface, DISPID id, DWORD grfdexFetch, DWORD *pgrfdex)
Definition: dispex.c:576
static HRESULT WINAPI DispatchEx_GetTypeInfo(IDispatchEx *iface, UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo)
Definition: dispex.c:378
static ULONG WINAPI DispatchEx_AddRef(IDispatchEx *iface)
Definition: dispex.c:354
static HRESULT WINAPI DispatchEx_GetMemberName(IDispatchEx *iface, DISPID id, BSTR *pbstrName)
Definition: dispex.c:583
static HRESULT WINAPI DispatchEx_GetNameSpaceParent(IDispatchEx *iface, IUnknown **ppunk)
Definition: dispex.c:597
static HRESULT WINAPI DispatchEx_GetTypeInfoCount(IDispatchEx *iface, UINT *pctinfo)
Definition: dispex.c:368
static HRESULT WINAPI DispatchEx_DeleteMemberByDispID(IDispatchEx *iface, DISPID id)
Definition: dispex.c:569
static HRESULT WINAPI DispatchEx_Invoke(IDispatchEx *iface, DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
Definition: dispex.c:408
static HRESULT WINAPI DispatchEx_DeleteMemberByName(IDispatchEx *iface, BSTR bstrName, DWORD grfdex)
Definition: dispex.c:562
static HRESULT WINAPI DispatchEx_QueryInterface(IDispatchEx *iface, REFIID riid, void **ppv)
Definition: dispex.c:347
static ULONG WINAPI DispatchEx_Release(IDispatchEx *iface)
Definition: dispex.c:361
static HRESULT WINAPI DispatchEx_GetIDsOfNames(IDispatchEx *iface, REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
Definition: dispex.c:388
static HRESULT WINAPI DispatchEx_GetNextDispID(IDispatchEx *iface, DWORD grfdex, DISPID id, DISPID *pid)
Definition: dispex.c:590

Definition at line 604 of file dispex.c.

Referenced by init_dispex().

◆ dispex_data_list

struct list dispex_data_list = LIST_INIT(dispex_data_list)
static

Definition at line 89 of file dispex.c.

Referenced by preprocess_dispex_data(), and release_typelib().

◆ lib_ids

lib_id_t lib_ids[]
static
Initial value:
= {
{ &LIBID_MSXML, 2 },
{ &LIBID_MSXML2, 3 }
}

Definition at line 94 of file dispex.c.

Referenced by get_typelib().

◆ tid_ids

tid_id_t tid_ids[]
static

Definition at line 99 of file dispex.c.

Referenced by get_libid_from_tid(), and get_riid_from_tid().

◆ typeinfos

ITypeInfo* typeinfos[LAST_tid]
static

Definition at line 91 of file dispex.c.

Referenced by get_typeinfo(), and release_typelib().

◆ typelib

ITypeLib* typelib[LibXml_Last]
static

Definition at line 90 of file dispex.c.

Referenced by get_typeinfo(), get_typelib(), and release_typelib().