ReactOS  0.4.15-dev-1367-g07cc0b5
oleobj.c File Reference
#include <stdarg.h>
#include <string.h>
#include "windef.h"
#include "winbase.h"
#include "winuser.h"
#include "winerror.h"
#include "wine/debug.h"
#include "ole2.h"
#include "compobj_private.h"
Include dependency graph for oleobj.c:

Go to the source code of this file.

Classes

struct  EnumSTATDATA
 
struct  OleAdviseHolderImpl
 
struct  DataAdviseHolder
 

Macros

#define COBJMACROS
 
#define NONAMELESSUNION
 
#define INITIAL_SINKS   10
 
#define WINE_ADVF_REMOTE   0x80000000
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (ole)
 
static void release_statdata (STATDATA *data)
 
static HRESULT copy_statdata (STATDATA *dst, const STATDATA *src)
 
static EnumSTATDATAimpl_from_IEnumSTATDATA (IEnumSTATDATA *iface)
 
static HRESULT WINAPI EnumSTATDATA_QueryInterface (IEnumSTATDATA *iface, REFIID riid, void **ppv)
 
static ULONG WINAPI EnumSTATDATA_AddRef (IEnumSTATDATA *iface)
 
static ULONG WINAPI EnumSTATDATA_Release (IEnumSTATDATA *iface)
 
static HRESULT WINAPI EnumSTATDATA_Next (IEnumSTATDATA *iface, ULONG num, LPSTATDATA data, ULONG *fetched)
 
static HRESULT WINAPI EnumSTATDATA_Skip (IEnumSTATDATA *iface, ULONG num)
 
static HRESULT WINAPI EnumSTATDATA_Reset (IEnumSTATDATA *iface)
 
static HRESULT WINAPI EnumSTATDATA_Clone (IEnumSTATDATA *iface, IEnumSTATDATA **ppenum)
 
HRESULT EnumSTATDATA_Construct (IUnknown *holder, ULONG index, DWORD array_len, STATDATA *data, BOOL copy, IEnumSTATDATA **ppenum)
 
static OleAdviseHolderImplimpl_from_IOleAdviseHolder (IOleAdviseHolder *iface)
 
static void OleAdviseHolderImpl_Destructor (OleAdviseHolderImpl *This)
 
static HRESULT WINAPI OleAdviseHolderImpl_QueryInterface (IOleAdviseHolder *iface, REFIID iid, void **obj)
 
static ULONG WINAPI OleAdviseHolderImpl_AddRef (IOleAdviseHolder *iface)
 
static ULONG WINAPI OleAdviseHolderImpl_Release (IOleAdviseHolder *iface)
 
static HRESULT WINAPI OleAdviseHolderImpl_Advise (IOleAdviseHolder *iface, IAdviseSink *pAdvise, DWORD *pdwConnection)
 
static HRESULT WINAPI OleAdviseHolderImpl_Unadvise (IOleAdviseHolder *iface, DWORD dwConnection)
 
static HRESULT WINAPI OleAdviseHolderImpl_EnumAdvise (IOleAdviseHolder *iface, IEnumSTATDATA **enum_advise)
 
static HRESULT WINAPI OleAdviseHolderImpl_SendOnRename (IOleAdviseHolder *iface, IMoniker *pmk)
 
static HRESULT WINAPI OleAdviseHolderImpl_SendOnSave (IOleAdviseHolder *iface)
 
static HRESULT WINAPI OleAdviseHolderImpl_SendOnClose (IOleAdviseHolder *iface)
 
static IOleAdviseHolderOleAdviseHolderImpl_Constructor (void)
 
static DataAdviseHolderimpl_from_IDataAdviseHolder (IDataAdviseHolder *iface)
 
static void DataAdviseHolder_Destructor (DataAdviseHolder *ptrToDestroy)
 
static HRESULT WINAPI DataAdviseHolder_QueryInterface (IDataAdviseHolder *iface, REFIID riid, void **ppvObject)
 
static ULONG WINAPI DataAdviseHolder_AddRef (IDataAdviseHolder *iface)
 
static ULONG WINAPI DataAdviseHolder_Release (IDataAdviseHolder *iface)
 
static HRESULT WINAPI DataAdviseHolder_Advise (IDataAdviseHolder *iface, IDataObject *pDataObject, FORMATETC *pFetc, DWORD advf, IAdviseSink *pAdvise, DWORD *pdwConnection)
 
static HRESULT WINAPI DataAdviseHolder_Unadvise (IDataAdviseHolder *iface, DWORD dwConnection)
 
static HRESULT WINAPI DataAdviseHolder_EnumAdvise (IDataAdviseHolder *iface, IEnumSTATDATA **enum_advise)
 
static HRESULT WINAPI DataAdviseHolder_SendOnDataChange (IDataAdviseHolder *iface, IDataObject *data_obj, DWORD dwReserved, DWORD advf)
 
HRESULT DataAdviseHolder_OnConnect (IDataAdviseHolder *iface, IDataObject *pDelegate)
 
void DataAdviseHolder_OnDisconnect (IDataAdviseHolder *iface)
 
static IDataAdviseHolderDataAdviseHolder_Constructor (void)
 
HRESULT WINAPI CreateOleAdviseHolder (IOleAdviseHolder **ppOAHolder)
 
HRESULT WINAPI CreateDataAdviseHolder (IDataAdviseHolder **ppDAHolder)
 

Variables

typedef helpstring
 
static const IEnumSTATDATAVtbl EnumSTATDATA_VTable
 
static const IOleAdviseHolderVtbl oahvt
 
static const IDataAdviseHolderVtbl DataAdviseHolderImpl_VTable
 

Macro Definition Documentation

◆ COBJMACROS

#define COBJMACROS

Definition at line 26 of file oleobj.c.

◆ INITIAL_SINKS

#define INITIAL_SINKS   10

Definition at line 40 of file oleobj.c.

◆ NONAMELESSUNION

#define NONAMELESSUNION

Definition at line 27 of file oleobj.c.

◆ WINE_ADVF_REMOTE

#define WINE_ADVF_REMOTE   0x80000000

Definition at line 544 of file oleobj.c.

Function Documentation

◆ copy_statdata()

static HRESULT copy_statdata ( STATDATA *  dst,
const STATDATA *  src 
)
static

Definition at line 54 of file oleobj.c.

55 {
56  HRESULT hr;
57 
58  hr = copy_formatetc( &dst->formatetc, &src->formatetc );
59  if (FAILED(hr)) return hr;
60  dst->advf = src->advf;
61  dst->pAdvSink = src->pAdvSink;
62  if (dst->pAdvSink) IAdviseSink_AddRef( dst->pAdvSink );
63  dst->dwConnection = src->dwConnection;
64  return S_OK;
65 }
HRESULT hr
Definition: shlfolder.c:183
static HRESULT copy_formatetc(FORMATETC *dst, const FORMATETC *src)
LONG HRESULT
Definition: typedefs.h:79
GLenum src
Definition: glext.h:6340
#define S_OK
Definition: intsafe.h:51
GLenum GLenum dst
Definition: glext.h:6340

Referenced by DataAdviseHolder_Advise(), EnumSTATDATA_Construct(), EnumSTATDATA_Next(), and OleAdviseHolderImpl_Advise().

◆ CreateDataAdviseHolder()

HRESULT WINAPI CreateDataAdviseHolder ( IDataAdviseHolder **  ppDAHolder)

Definition at line 893 of file oleobj.c.

894 {
895  TRACE("(%p)\n", ppDAHolder);
896 
897  if (ppDAHolder==NULL)
898  return E_POINTER;
899 
900  *ppDAHolder = DataAdviseHolder_Constructor();
901 
902  if (*ppDAHolder != NULL)
903  return S_OK;
904 
905  return E_OUTOFMEMORY;
906 }
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define TRACE(s)
Definition: solgame.cpp:4
static IDataAdviseHolder * DataAdviseHolder_Constructor(void)
Definition: oleobj.c:849
#define S_OK
Definition: intsafe.h:51
#define NULL
Definition: types.h:112
#define E_POINTER
Definition: winerror.h:2365

Referenced by DefaultHandler_DAdvise().

◆ CreateOleAdviseHolder()

HRESULT WINAPI CreateOleAdviseHolder ( IOleAdviseHolder **  ppOAHolder)

Definition at line 875 of file oleobj.c.

876 {
877  TRACE("(%p)\n", ppOAHolder);
878 
879  if (ppOAHolder==NULL)
880  return E_POINTER;
881 
882  *ppOAHolder = OleAdviseHolderImpl_Constructor ();
883 
884  if (*ppOAHolder != NULL)
885  return S_OK;
886 
887  return E_OUTOFMEMORY;
888 }
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define TRACE(s)
Definition: solgame.cpp:4
static IOleAdviseHolder * OleAdviseHolderImpl_Constructor(void)
Definition: oleobj.c:513
#define S_OK
Definition: intsafe.h:51
#define NULL
Definition: types.h:112
#define E_POINTER
Definition: winerror.h:2365

Referenced by DefaultHandler_Advise(), and OleObject_Advise().

◆ DataAdviseHolder_AddRef()

static ULONG WINAPI DataAdviseHolder_AddRef ( IDataAdviseHolder iface)
static

Definition at line 609 of file oleobj.c.

610 {
612  TRACE("(%p) (ref=%d)\n", This, This->ref);
613  return InterlockedIncrement(&This->ref);
614 }
#define TRACE(s)
Definition: solgame.cpp:4
#define InterlockedIncrement
Definition: armddk.h:53
static DataAdviseHolder * impl_from_IDataAdviseHolder(IDataAdviseHolder *iface)
Definition: oleobj.c:546

◆ DataAdviseHolder_Advise()

static HRESULT WINAPI DataAdviseHolder_Advise ( IDataAdviseHolder iface,
IDataObject pDataObject,
FORMATETC *  pFetc,
DWORD  advf,
IAdviseSink pAdvise,
DWORD pdwConnection 
)
static

Definition at line 635 of file oleobj.c.

639 {
640  DWORD index;
641  STATDATA new_conn;
643 
644  TRACE("(%p)->(%p, %p, %08x, %p, %p)\n", This, pDataObject, pFetc, advf,
645  pAdvise, pdwConnection);
646 
647  if (pdwConnection==NULL)
648  return E_POINTER;
649 
650  *pdwConnection = 0;
651 
652  for (index = 0; index < This->maxCons; index++)
653  {
654  if (This->connections[index].pAdvSink == NULL)
655  break;
656  }
657 
658  if (index == This->maxCons)
659  {
660  This->maxCons+=INITIAL_SINKS;
662  This->connections,
663  This->maxCons * sizeof(*This->connections));
664  This->remote_connections = HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
665  This->remote_connections,
666  This->maxCons * sizeof(*This->remote_connections));
667  }
668 
669  new_conn.pAdvSink = pAdvise;
670  new_conn.advf = advf & ~WINE_ADVF_REMOTE;
671  new_conn.formatetc = *pFetc;
672  new_conn.dwConnection = index + 1; /* 0 is not a valid cookie, so increment the index */
673 
674  copy_statdata(This->connections + index, &new_conn);
675 
676  if (This->connections[index].pAdvSink != NULL)
677  {
678  /* if we are already connected advise the remote object */
679  if (This->delegate)
680  {
681  HRESULT hr;
682 
683  hr = IDataObject_DAdvise(This->delegate, &new_conn.formatetc,
684  new_conn.advf, new_conn.pAdvSink,
685  &This->remote_connections[index]);
686  if (FAILED(hr))
687  {
688  IDataAdviseHolder_Unadvise(iface, new_conn.dwConnection);
689  return hr;
690  }
691  This->connections[index].advf |= WINE_ADVF_REMOTE;
692  }
693  else if(advf & ADVF_PRIMEFIRST)
694  /* only do this if we have no delegate, since in the above case the
695  * delegate will do the priming for us */
696  IDataAdviseHolder_SendOnDataChange(iface, pDataObject, 0, advf);
697  }
698 
699  *pdwConnection = new_conn.dwConnection;
700 
701  return S_OK;
702 }
HRESULT hr
Definition: shlfolder.c:183
static HRESULT copy_statdata(STATDATA *dst, const STATDATA *src)
Definition: oleobj.c:54
GLuint index
Definition: glext.h:6031
#define TRACE(s)
Definition: solgame.cpp:4
#define WINE_ADVF_REMOTE
Definition: oleobj.c:544
#define GetProcessHeap()
Definition: compat.h:595
LONG HRESULT
Definition: typedefs.h:79
unsigned long DWORD
Definition: ntddk_ex.h:95
#define index(s, c)
Definition: various.h:29
#define S_OK
Definition: intsafe.h:51
#define INITIAL_SINKS
Definition: oleobj.c:40
#define HeapReAlloc
Definition: compat.h:593
#define NULL
Definition: types.h:112
#define HEAP_ZERO_MEMORY
Definition: compat.h:134
#define E_POINTER
Definition: winerror.h:2365
static DataAdviseHolder * impl_from_IDataAdviseHolder(IDataAdviseHolder *iface)
Definition: oleobj.c:546

◆ DataAdviseHolder_Constructor()

static IDataAdviseHolder* DataAdviseHolder_Constructor ( void  )
static

Definition at line 849 of file oleobj.c.

850 {
851  DataAdviseHolder* newHolder;
852 
853  newHolder = HeapAlloc(GetProcessHeap(), 0, sizeof(DataAdviseHolder));
854 
856  newHolder->ref = 1;
857  newHolder->maxCons = INITIAL_SINKS;
859  newHolder->maxCons * sizeof(*newHolder->connections));
861  newHolder->maxCons * sizeof(*newHolder->remote_connections));
862  newHolder->delegate = NULL;
863 
864  TRACE("returning %p\n", &newHolder->IDataAdviseHolder_iface);
865  return &newHolder->IDataAdviseHolder_iface;
866 }
IDataAdviseHolder IDataAdviseHolder_iface
Definition: oleobj.c:534
DWORD * remote_connections
Definition: oleobj.c:539
static const IDataAdviseHolderVtbl DataAdviseHolderImpl_VTable
Definition: oleobj.c:795
STATDATA * connections
Definition: oleobj.c:538
#define TRACE(s)
Definition: solgame.cpp:4
#define GetProcessHeap()
Definition: compat.h:595
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
DWORD maxCons
Definition: oleobj.c:537
IDataObject * delegate
Definition: oleobj.c:540
#define INITIAL_SINKS
Definition: oleobj.c:40
#define NULL
Definition: types.h:112
#define HEAP_ZERO_MEMORY
Definition: compat.h:134

Referenced by CreateDataAdviseHolder().

◆ DataAdviseHolder_Destructor()

static void DataAdviseHolder_Destructor ( DataAdviseHolder ptrToDestroy)
static

Definition at line 554 of file oleobj.c.

555 {
556  DWORD index;
557  TRACE("%p\n", ptrToDestroy);
558 
559  for (index = 0; index < ptrToDestroy->maxCons; index++)
560  {
561  if (ptrToDestroy->connections[index].pAdvSink != NULL)
562  {
563  if (ptrToDestroy->delegate &&
564  (ptrToDestroy->connections[index].advf & WINE_ADVF_REMOTE))
565  IDataObject_DUnadvise(ptrToDestroy->delegate,
566  ptrToDestroy->remote_connections[index]);
567 
568  release_statdata(ptrToDestroy->connections + index);
569  }
570  }
571 
572  HeapFree(GetProcessHeap(), 0, ptrToDestroy->remote_connections);
573  HeapFree(GetProcessHeap(), 0, ptrToDestroy->connections);
574  HeapFree(GetProcessHeap(), 0, ptrToDestroy);
575 }
DWORD * remote_connections
Definition: oleobj.c:539
static void release_statdata(STATDATA *data)
Definition: oleobj.c:42
STATDATA * connections
Definition: oleobj.c:538
GLuint index
Definition: glext.h:6031
#define TRACE(s)
Definition: solgame.cpp:4
#define WINE_ADVF_REMOTE
Definition: oleobj.c:544
#define GetProcessHeap()
Definition: compat.h:595
unsigned long DWORD
Definition: ntddk_ex.h:95
DWORD maxCons
Definition: oleobj.c:537
#define index(s, c)
Definition: various.h:29
IDataObject * delegate
Definition: oleobj.c:540
#define NULL
Definition: types.h:112
#define HeapFree(x, y, z)
Definition: compat.h:594

Referenced by DataAdviseHolder_Release().

◆ DataAdviseHolder_EnumAdvise()

static HRESULT WINAPI DataAdviseHolder_EnumAdvise ( IDataAdviseHolder iface,
IEnumSTATDATA **  enum_advise 
)
static

Definition at line 734 of file oleobj.c.

736 {
738  IUnknown *unk;
739  HRESULT hr;
740 
741  TRACE("(%p)->(%p)\n", This, enum_advise);
742 
743  IDataAdviseHolder_QueryInterface(iface, &IID_IUnknown, (void**)&unk);
744  hr = EnumSTATDATA_Construct(unk, 0, This->maxCons, This->connections, TRUE, enum_advise);
745  IUnknown_Release(unk);
746  return hr;
747 }
HRESULT hr
Definition: shlfolder.c:183
#define TRUE
Definition: types.h:120
#define TRACE(s)
Definition: solgame.cpp:4
LONG HRESULT
Definition: typedefs.h:79
const GUID IID_IUnknown
HRESULT EnumSTATDATA_Construct(IUnknown *holder, ULONG index, DWORD array_len, STATDATA *data, BOOL copy, IEnumSTATDATA **ppenum)
Definition: oleobj.c:197
static DataAdviseHolder * impl_from_IDataAdviseHolder(IDataAdviseHolder *iface)
Definition: oleobj.c:546

◆ DataAdviseHolder_OnConnect()

HRESULT DataAdviseHolder_OnConnect ( IDataAdviseHolder iface,
IDataObject pDelegate 
)

Definition at line 806 of file oleobj.c.

807 {
809  DWORD index;
810  HRESULT hr = S_OK;
811 
812  for(index = 0; index < This->maxCons; index++)
813  {
814  if(This->connections[index].pAdvSink != NULL)
815  {
816  hr = IDataObject_DAdvise(pDelegate, &This->connections[index].formatetc,
817  This->connections[index].advf,
818  This->connections[index].pAdvSink,
819  &This->remote_connections[index]);
820  if (FAILED(hr)) break;
821  This->connections[index].advf |= WINE_ADVF_REMOTE;
822  }
823  }
824  This->delegate = pDelegate;
825  return hr;
826 }
HRESULT hr
Definition: shlfolder.c:183
GLuint index
Definition: glext.h:6031
#define WINE_ADVF_REMOTE
Definition: oleobj.c:544
LONG HRESULT
Definition: typedefs.h:79
unsigned long DWORD
Definition: ntddk_ex.h:95
#define index(s, c)
Definition: various.h:29
#define S_OK
Definition: intsafe.h:51
#define NULL
Definition: types.h:112
static DataAdviseHolder * impl_from_IDataAdviseHolder(IDataAdviseHolder *iface)
Definition: oleobj.c:546

Referenced by DefaultHandler_DAdvise(), and DefaultHandler_Run().

◆ DataAdviseHolder_OnDisconnect()

void DataAdviseHolder_OnDisconnect ( IDataAdviseHolder iface)

Definition at line 828 of file oleobj.c.

829 {
831  DWORD index;
832 
833  for(index = 0; index < This->maxCons; index++)
834  {
835  if((This->connections[index].pAdvSink != NULL) &&
836  (This->connections[index].advf & WINE_ADVF_REMOTE))
837  {
838  IDataObject_DUnadvise(This->delegate, This->remote_connections[index]);
839  This->remote_connections[index] = 0;
840  This->connections[index].advf &= ~WINE_ADVF_REMOTE;
841  }
842  }
843  This->delegate = NULL;
844 }
GLuint index
Definition: glext.h:6031
#define WINE_ADVF_REMOTE
Definition: oleobj.c:544
unsigned long DWORD
Definition: ntddk_ex.h:95
#define index(s, c)
Definition: various.h:29
#define NULL
Definition: types.h:112
static DataAdviseHolder * impl_from_IDataAdviseHolder(IDataAdviseHolder *iface)
Definition: oleobj.c:546

Referenced by DefaultHandler_Stop().

◆ DataAdviseHolder_QueryInterface()

static HRESULT WINAPI DataAdviseHolder_QueryInterface ( IDataAdviseHolder iface,
REFIID  riid,
void **  ppvObject 
)
static

Definition at line 580 of file oleobj.c.

582 {
584  TRACE("(%p)->(%s,%p)\n",This,debugstr_guid(riid),ppvObject);
585 
586  if ( (This==0) || (ppvObject==0) )
587  return E_INVALIDARG;
588 
589  *ppvObject = 0;
590 
591  if ( IsEqualIID(&IID_IUnknown, riid) ||
593  {
594  *ppvObject = iface;
595  }
596 
597  if ((*ppvObject)==0)
598  {
599  return E_NOINTERFACE;
600  }
601 
602  IUnknown_AddRef((IUnknown*)*ppvObject);
603  return S_OK;
604 }
#define E_NOINTERFACE
Definition: winerror.h:2364
REFIID riid
Definition: precomp.h:44
const GUID IID_IDataAdviseHolder
#define E_INVALIDARG
Definition: ddrawi.h:101
#define debugstr_guid
Definition: kernel32.h:35
#define TRACE(s)
Definition: solgame.cpp:4
const GUID IID_IUnknown
REFIID LPVOID * ppvObject
Definition: precomp.h:44
#define S_OK
Definition: intsafe.h:51
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95
static DataAdviseHolder * impl_from_IDataAdviseHolder(IDataAdviseHolder *iface)
Definition: oleobj.c:546

◆ DataAdviseHolder_Release()

static ULONG WINAPI DataAdviseHolder_Release ( IDataAdviseHolder iface)
static

Definition at line 619 of file oleobj.c.

620 {
622  ULONG ref;
623  TRACE("(%p) (ref=%d)\n", This, This->ref);
624 
625  ref = InterlockedDecrement(&This->ref);
627 
628  return ref;
629 }
static void DataAdviseHolder_Destructor(DataAdviseHolder *ptrToDestroy)
Definition: oleobj.c:554
Definition: send.c:48
GLenum GLint ref
Definition: glext.h:6028
#define TRACE(s)
Definition: solgame.cpp:4
#define InterlockedDecrement
Definition: armddk.h:52
unsigned int ULONG
Definition: retypes.h:1
static DataAdviseHolder * impl_from_IDataAdviseHolder(IDataAdviseHolder *iface)
Definition: oleobj.c:546

◆ DataAdviseHolder_SendOnDataChange()

static HRESULT WINAPI DataAdviseHolder_SendOnDataChange ( IDataAdviseHolder iface,
IDataObject data_obj,
DWORD  dwReserved,
DWORD  advf 
)
static

Definition at line 752 of file oleobj.c.

755 {
756  IEnumSTATDATA *pEnum;
757  HRESULT hr;
758 
759  TRACE("(%p)->(%p, %08x, %08x)\n", iface, data_obj, dwReserved, advf);
760 
761  hr = IDataAdviseHolder_EnumAdvise(iface, &pEnum);
762  if (SUCCEEDED(hr))
763  {
764  STATDATA statdata;
765  while (IEnumSTATDATA_Next(pEnum, 1, &statdata, NULL) == S_OK)
766  {
767  STGMEDIUM stg;
768  stg.tymed = TYMED_NULL;
769  stg.u.pstg = NULL;
770  stg.pUnkForRelease = NULL;
771 
772  if(!(statdata.advf & ADVF_NODATA))
773  {
774  hr = IDataObject_GetData(data_obj, &statdata.formatetc, &stg);
775  }
776 
777  IAdviseSink_OnDataChange(statdata.pAdvSink, &statdata.formatetc, &stg);
778 
779  if(statdata.advf & ADVF_ONLYONCE)
780  {
781  IDataAdviseHolder_Unadvise(iface, statdata.dwConnection);
782  }
783 
784  release_statdata(&statdata);
785  }
786  IEnumSTATDATA_Release(pEnum);
787  }
788 
789  return S_OK;
790 }
HRESULT hr
Definition: shlfolder.c:183
static void release_statdata(STATDATA *data)
Definition: oleobj.c:42
_In_ HANDLE _In_ DWORD _In_ DWORD _Inout_opt_ LPOVERLAPPED _In_opt_ LPTRANSMIT_FILE_BUFFERS _In_ DWORD dwReserved
Definition: mswsock.h:90
if SUCCEEDED(hr)
#define TRACE(s)
Definition: solgame.cpp:4
LONG HRESULT
Definition: typedefs.h:79
#define S_OK
Definition: intsafe.h:51
#define NULL
Definition: types.h:112

◆ DataAdviseHolder_Unadvise()

static HRESULT WINAPI DataAdviseHolder_Unadvise ( IDataAdviseHolder iface,
DWORD  dwConnection 
)
static

Definition at line 707 of file oleobj.c.

709 {
711  DWORD index;
712  TRACE("(%p)->(%u)\n", This, dwConnection);
713 
714  /* The connection number is 1 more than the index, see DataAdviseHolder_Advise */
715  index = dwConnection - 1;
716 
717  if (index >= This->maxCons || This->connections[index].pAdvSink == NULL)
718  return OLE_E_NOCONNECTION;
719 
720  if (This->delegate && This->connections[index].advf & WINE_ADVF_REMOTE)
721  {
722  IDataObject_DUnadvise(This->delegate, This->remote_connections[index]);
723  This->remote_connections[index] = 0;
724  }
725 
726  release_statdata(This->connections + index);
727 
728  return S_OK;
729 }
static void release_statdata(STATDATA *data)
Definition: oleobj.c:42
#define OLE_E_NOCONNECTION
Definition: winerror.h:2618
GLuint index
Definition: glext.h:6031
#define TRACE(s)
Definition: solgame.cpp:4
#define WINE_ADVF_REMOTE
Definition: oleobj.c:544
unsigned long DWORD
Definition: ntddk_ex.h:95
#define index(s, c)
Definition: various.h:29
#define S_OK
Definition: intsafe.h:51
#define NULL
Definition: types.h:112
static DataAdviseHolder * impl_from_IDataAdviseHolder(IDataAdviseHolder *iface)
Definition: oleobj.c:546

◆ EnumSTATDATA_AddRef()

static ULONG WINAPI EnumSTATDATA_AddRef ( IEnumSTATDATA iface)
static

Definition at line 100 of file oleobj.c.

101 {
103  TRACE("()\n");
104  return InterlockedIncrement(&This->ref);
105 }
#define TRACE(s)
Definition: solgame.cpp:4
#define InterlockedIncrement
Definition: armddk.h:53
static EnumSTATDATA * impl_from_IEnumSTATDATA(IEnumSTATDATA *iface)
Definition: oleobj.c:82

◆ EnumSTATDATA_Clone()

static HRESULT WINAPI EnumSTATDATA_Clone ( IEnumSTATDATA iface,
IEnumSTATDATA **  ppenum 
)
static

Definition at line 178 of file oleobj.c.

179 {
181 
182  return EnumSTATDATA_Construct(This->holder, This->index, This->num_of_elems, This->statdata,
183  TRUE, ppenum);
184 }
#define TRUE
Definition: types.h:120
HRESULT EnumSTATDATA_Construct(IUnknown *holder, ULONG index, DWORD array_len, STATDATA *data, BOOL copy, IEnumSTATDATA **ppenum)
Definition: oleobj.c:197
static EnumSTATDATA * impl_from_IEnumSTATDATA(IEnumSTATDATA *iface)
Definition: oleobj.c:82

◆ EnumSTATDATA_Construct()

HRESULT EnumSTATDATA_Construct ( IUnknown holder,
ULONG  index,
DWORD  array_len,
STATDATA *  data,
BOOL  copy,
IEnumSTATDATA **  ppenum 
)

Definition at line 197 of file oleobj.c.

199 {
200  EnumSTATDATA *This = HeapAlloc(GetProcessHeap(), 0, sizeof(*This));
201  DWORD i, count;
202 
203  if (!This) return E_OUTOFMEMORY;
204 
205  This->IEnumSTATDATA_iface.lpVtbl = &EnumSTATDATA_VTable;
206  This->ref = 1;
207  This->index = index;
208 
209  if (copy)
210  {
211  This->statdata = HeapAlloc(GetProcessHeap(), 0, array_len * sizeof(*This->statdata));
212  if(!This->statdata)
213  {
215  return E_OUTOFMEMORY;
216  }
217 
218  for(i = 0, count = 0; i < array_len; i++)
219  {
220  if(data[i].pAdvSink)
221  {
222  copy_statdata(This->statdata + count, data + i);
223  count++;
224  }
225  }
226  }
227  else
228  {
229  This->statdata = data;
230  count = array_len;
231  }
232 
233  This->num_of_elems = count;
234  This->holder = holder;
235  if (holder) IUnknown_AddRef(holder);
236  *ppenum = &This->IEnumSTATDATA_iface;
237  return S_OK;
238 }
GLuint GLuint GLsizei count
Definition: gl.h:1545
static HRESULT copy_statdata(STATDATA *dst, const STATDATA *src)
Definition: oleobj.c:54
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
static const IEnumSTATDATAVtbl EnumSTATDATA_VTable
Definition: oleobj.c:186
#define GetProcessHeap()
Definition: compat.h:595
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
unsigned long DWORD
Definition: ntddk_ex.h:95
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
#define index(s, c)
Definition: various.h:29
#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
INT copy(TCHAR source[MAX_PATH], TCHAR dest[MAX_PATH], INT append, DWORD lpdwFlags, BOOL bTouch)
Definition: copy.c:51
#define HeapFree(x, y, z)
Definition: compat.h:594

Referenced by DataAdviseHolder_EnumAdvise(), DataCache_EnumCache(), EnumSTATDATA_Clone(), and OleAdviseHolderImpl_EnumAdvise().

◆ EnumSTATDATA_Next()

static HRESULT WINAPI EnumSTATDATA_Next ( IEnumSTATDATA iface,
ULONG  num,
LPSTATDATA  data,
ULONG fetched 
)
static

Definition at line 124 of file oleobj.c.

126 {
128  DWORD count = 0;
129  HRESULT hr = S_OK;
130 
131  TRACE("(%d, %p, %p)\n", num, data, fetched);
132 
133  while(num--)
134  {
135  if (This->index >= This->num_of_elems)
136  {
137  hr = S_FALSE;
138  break;
139  }
140 
141  copy_statdata(data + count, This->statdata + This->index);
142 
143  count++;
144  This->index++;
145  }
146 
147  if (fetched) *fetched = count;
148 
149  return hr;
150 }
HRESULT hr
Definition: shlfolder.c:183
GLuint GLuint GLsizei count
Definition: gl.h:1545
static HRESULT copy_statdata(STATDATA *dst, const STATDATA *src)
Definition: oleobj.c:54
#define S_FALSE
Definition: winerror.h:2357
#define TRACE(s)
Definition: solgame.cpp:4
LONG HRESULT
Definition: typedefs.h:79
unsigned long DWORD
Definition: ntddk_ex.h:95
GLuint GLuint num
Definition: glext.h:9618
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
#define S_OK
Definition: intsafe.h:51
static EnumSTATDATA * impl_from_IEnumSTATDATA(IEnumSTATDATA *iface)
Definition: oleobj.c:82

◆ EnumSTATDATA_QueryInterface()

static HRESULT WINAPI EnumSTATDATA_QueryInterface ( IEnumSTATDATA iface,
REFIID  riid,
void **  ppv 
)
static

Definition at line 87 of file oleobj.c.

88 {
89  TRACE("(%s, %p)\n", debugstr_guid(riid), ppv);
90  if (IsEqualIID(riid, &IID_IUnknown) ||
92  {
93  IEnumSTATDATA_AddRef(iface);
94  *ppv = iface;
95  return S_OK;
96  }
97  return E_NOINTERFACE;
98 }
#define E_NOINTERFACE
Definition: winerror.h:2364
REFIID riid
Definition: precomp.h:44
REFIID LPVOID * ppv
Definition: atlbase.h:39
const GUID IID_IEnumSTATDATA
#define debugstr_guid
Definition: kernel32.h:35
#define TRACE(s)
Definition: solgame.cpp:4
const GUID IID_IUnknown
#define S_OK
Definition: intsafe.h:51
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95

◆ EnumSTATDATA_Release()

static ULONG WINAPI EnumSTATDATA_Release ( IEnumSTATDATA iface)
static

Definition at line 107 of file oleobj.c.

108 {
110  LONG refs = InterlockedDecrement(&This->ref);
111  TRACE("()\n");
112  if (!refs)
113  {
114  DWORD i;
115  for(i = 0; i < This->num_of_elems; i++)
116  release_statdata(This->statdata + i);
117  HeapFree(GetProcessHeap(), 0, This->statdata);
118  if (This->holder) IUnknown_Release(This->holder);
120  }
121  return refs;
122 }
static void release_statdata(STATDATA *data)
Definition: oleobj.c:42
long LONG
Definition: pedump.c:60
#define TRACE(s)
Definition: solgame.cpp:4
#define GetProcessHeap()
Definition: compat.h:595
unsigned long DWORD
Definition: ntddk_ex.h:95
#define InterlockedDecrement
Definition: armddk.h:52
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
static EnumSTATDATA * impl_from_IEnumSTATDATA(IEnumSTATDATA *iface)
Definition: oleobj.c:82
#define HeapFree(x, y, z)
Definition: compat.h:594

◆ EnumSTATDATA_Reset()

static HRESULT WINAPI EnumSTATDATA_Reset ( IEnumSTATDATA iface)
static

Definition at line 168 of file oleobj.c.

169 {
171 
172  TRACE("()\n");
173 
174  This->index = 0;
175  return S_OK;
176 }
#define TRACE(s)
Definition: solgame.cpp:4
#define S_OK
Definition: intsafe.h:51
static EnumSTATDATA * impl_from_IEnumSTATDATA(IEnumSTATDATA *iface)
Definition: oleobj.c:82

◆ EnumSTATDATA_Skip()

static HRESULT WINAPI EnumSTATDATA_Skip ( IEnumSTATDATA iface,
ULONG  num 
)
static

Definition at line 152 of file oleobj.c.

153 {
155 
156  TRACE("(%d)\n", num);
157 
158  if(This->index + num >= This->num_of_elems)
159  {
160  This->index = This->num_of_elems;
161  return S_FALSE;
162  }
163 
164  This->index += num;
165  return S_OK;
166 }
#define S_FALSE
Definition: winerror.h:2357
#define TRACE(s)
Definition: solgame.cpp:4
GLuint GLuint num
Definition: glext.h:9618
#define S_OK
Definition: intsafe.h:51
static EnumSTATDATA * impl_from_IEnumSTATDATA(IEnumSTATDATA *iface)
Definition: oleobj.c:82

◆ impl_from_IDataAdviseHolder()

static DataAdviseHolder* impl_from_IDataAdviseHolder ( IDataAdviseHolder iface)
inlinestatic

Definition at line 546 of file oleobj.c.

547 {
548  return CONTAINING_RECORD(iface, DataAdviseHolder, IDataAdviseHolder_iface);
549 }
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 DataAdviseHolder_AddRef(), DataAdviseHolder_Advise(), DataAdviseHolder_EnumAdvise(), DataAdviseHolder_OnConnect(), DataAdviseHolder_OnDisconnect(), DataAdviseHolder_QueryInterface(), DataAdviseHolder_Release(), and DataAdviseHolder_Unadvise().

◆ impl_from_IEnumSTATDATA()

static EnumSTATDATA* impl_from_IEnumSTATDATA ( IEnumSTATDATA iface)
inlinestatic

Definition at line 82 of file oleobj.c.

83 {
84  return CONTAINING_RECORD(iface, EnumSTATDATA, IEnumSTATDATA_iface);
85 }
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 EnumSTATDATA_AddRef(), EnumSTATDATA_Clone(), EnumSTATDATA_Next(), EnumSTATDATA_Release(), EnumSTATDATA_Reset(), and EnumSTATDATA_Skip().

◆ impl_from_IOleAdviseHolder()

static OleAdviseHolderImpl* impl_from_IOleAdviseHolder ( IOleAdviseHolder iface)
inlinestatic

Definition at line 253 of file oleobj.c.

254 {
255  return CONTAINING_RECORD(iface, OleAdviseHolderImpl, IOleAdviseHolder_iface);
256 }
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 OleAdviseHolderImpl_AddRef(), OleAdviseHolderImpl_Advise(), OleAdviseHolderImpl_EnumAdvise(), OleAdviseHolderImpl_QueryInterface(), OleAdviseHolderImpl_Release(), and OleAdviseHolderImpl_Unadvise().

◆ OleAdviseHolderImpl_AddRef()

static ULONG WINAPI OleAdviseHolderImpl_AddRef ( IOleAdviseHolder iface)
static

Definition at line 307 of file oleobj.c.

308 {
311 
312  TRACE("(%p)->(ref=%d)\n", This, ref - 1);
313 
314  return ref;
315 }
Definition: send.c:48
GLenum GLint ref
Definition: glext.h:6028
#define TRACE(s)
Definition: solgame.cpp:4
static OleAdviseHolderImpl * impl_from_IOleAdviseHolder(IOleAdviseHolder *iface)
Definition: oleobj.c:253
#define InterlockedIncrement
Definition: armddk.h:53
unsigned int ULONG
Definition: retypes.h:1

◆ OleAdviseHolderImpl_Advise()

static HRESULT WINAPI OleAdviseHolderImpl_Advise ( IOleAdviseHolder iface,
IAdviseSink pAdvise,
DWORD pdwConnection 
)
static

Definition at line 335 of file oleobj.c.

338 {
339  DWORD index;
341  STATDATA new_conn;
342  static const FORMATETC empty_fmtetc = {0, NULL, 0, -1, 0};
343 
344  TRACE("(%p)->(%p, %p)\n", This, pAdvise, pdwConnection);
345 
346  if (pdwConnection==NULL)
347  return E_POINTER;
348 
349  *pdwConnection = 0;
350 
351  for (index = 0; index < This->max_cons; index++)
352  {
353  if (This->connections[index].pAdvSink == NULL)
354  break;
355  }
356 
357  if (index == This->max_cons)
358  {
359  This->max_cons += INITIAL_SINKS;
360  This->connections = HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, This->connections,
361  This->max_cons * sizeof(*This->connections));
362  }
363 
364  new_conn.pAdvSink = pAdvise;
365  new_conn.advf = 0;
366  new_conn.formatetc = empty_fmtetc;
367  new_conn.dwConnection = index + 1; /* 0 is not a valid cookie, so increment the index */
368 
369  copy_statdata(This->connections + index, &new_conn);
370 
371  *pdwConnection = new_conn.dwConnection;
372 
373  return S_OK;
374 }
static HRESULT copy_statdata(STATDATA *dst, const STATDATA *src)
Definition: oleobj.c:54
GLuint index
Definition: glext.h:6031
#define TRACE(s)
Definition: solgame.cpp:4
#define GetProcessHeap()
Definition: compat.h:595
unsigned long DWORD
Definition: ntddk_ex.h:95
#define index(s, c)
Definition: various.h:29
static OleAdviseHolderImpl * impl_from_IOleAdviseHolder(IOleAdviseHolder *iface)
Definition: oleobj.c:253
#define S_OK
Definition: intsafe.h:51
#define INITIAL_SINKS
Definition: oleobj.c:40
#define HeapReAlloc
Definition: compat.h:593
#define NULL
Definition: types.h:112
#define HEAP_ZERO_MEMORY
Definition: compat.h:134
#define E_POINTER
Definition: winerror.h:2365

◆ OleAdviseHolderImpl_Constructor()

static IOleAdviseHolder* OleAdviseHolderImpl_Constructor ( void  )
static

Definition at line 513 of file oleobj.c.

514 {
515  OleAdviseHolderImpl* lpoah;
516 
517  lpoah = HeapAlloc(GetProcessHeap(), 0, sizeof(OleAdviseHolderImpl));
518 
519  lpoah->IOleAdviseHolder_iface.lpVtbl = &oahvt;
520  lpoah->ref = 1;
521  lpoah->max_cons = INITIAL_SINKS;
523  lpoah->max_cons * sizeof(*lpoah->connections));
524 
525  TRACE("returning %p\n", &lpoah->IOleAdviseHolder_iface);
526  return &lpoah->IOleAdviseHolder_iface;
527 }
static const IOleAdviseHolderVtbl oahvt
Definition: oleobj.c:496
#define TRACE(s)
Definition: solgame.cpp:4
#define GetProcessHeap()
Definition: compat.h:595
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
IOleAdviseHolder IOleAdviseHolder_iface
Definition: oleobj.c:245
STATDATA * connections
Definition: oleobj.c:250
#define INITIAL_SINKS
Definition: oleobj.c:40
#define HEAP_ZERO_MEMORY
Definition: compat.h:134

Referenced by CreateOleAdviseHolder().

◆ OleAdviseHolderImpl_Destructor()

static void OleAdviseHolderImpl_Destructor ( OleAdviseHolderImpl This)
static

Definition at line 261 of file oleobj.c.

262 {
263  DWORD index;
264  TRACE("%p\n", This);
265 
266  for (index = 0; index < This->max_cons; index++)
267  {
268  if (This->connections[index].pAdvSink != NULL)
269  release_statdata(This->connections + index);
270  }
271 
272  HeapFree(GetProcessHeap(), 0, This->connections);
274 }
static void release_statdata(STATDATA *data)
Definition: oleobj.c:42
GLuint index
Definition: glext.h:6031
#define TRACE(s)
Definition: solgame.cpp:4
#define GetProcessHeap()
Definition: compat.h:595
unsigned long DWORD
Definition: ntddk_ex.h:95
#define index(s, c)
Definition: various.h:29
#define NULL
Definition: types.h:112
#define HeapFree(x, y, z)
Definition: compat.h:594

Referenced by OleAdviseHolderImpl_Release().

◆ OleAdviseHolderImpl_EnumAdvise()

static HRESULT WINAPI OleAdviseHolderImpl_EnumAdvise ( IOleAdviseHolder iface,
IEnumSTATDATA **  enum_advise 
)
static

Definition at line 401 of file oleobj.c.

402 {
404  IUnknown *unk;
405  HRESULT hr;
406 
407  TRACE("(%p)->(%p)\n", This, enum_advise);
408 
409  IOleAdviseHolder_QueryInterface(iface, &IID_IUnknown, (void**)&unk);
410  hr = EnumSTATDATA_Construct(unk, 0, This->max_cons, This->connections, TRUE, enum_advise);
411  IUnknown_Release(unk);
412  return hr;
413 }
HRESULT hr
Definition: shlfolder.c:183
#define TRUE
Definition: types.h:120
#define TRACE(s)
Definition: solgame.cpp:4
LONG HRESULT
Definition: typedefs.h:79
const GUID IID_IUnknown
static OleAdviseHolderImpl * impl_from_IOleAdviseHolder(IOleAdviseHolder *iface)
Definition: oleobj.c:253
HRESULT EnumSTATDATA_Construct(IUnknown *holder, ULONG index, DWORD array_len, STATDATA *data, BOOL copy, IEnumSTATDATA **ppenum)
Definition: oleobj.c:197

◆ OleAdviseHolderImpl_QueryInterface()

static HRESULT WINAPI OleAdviseHolderImpl_QueryInterface ( IOleAdviseHolder iface,
REFIID  iid,
void **  obj 
)
static

Definition at line 279 of file oleobj.c.

281 {
283  TRACE("(%p)->(%s,%p)\n",This, debugstr_guid(iid), obj);
284 
285  if (obj == NULL)
286  return E_POINTER;
287 
288  *obj = NULL;
289 
290  if (IsEqualIID(iid, &IID_IUnknown) ||
292  {
293  *obj = &This->IOleAdviseHolder_iface;
294  }
295 
296  if(*obj == NULL)
297  return E_NOINTERFACE;
298 
299  IUnknown_AddRef((IUnknown*)*obj);
300 
301  return S_OK;
302 }
#define E_NOINTERFACE
Definition: winerror.h:2364
#define debugstr_guid
Definition: kernel32.h:35
#define TRACE(s)
Definition: solgame.cpp:4
const GUID IID_IUnknown
static OleAdviseHolderImpl * impl_from_IOleAdviseHolder(IOleAdviseHolder *iface)
Definition: oleobj.c:253
#define S_OK
Definition: intsafe.h:51
#define NULL
Definition: types.h:112
const GUID IID_IOleAdviseHolder
#define E_POINTER
Definition: winerror.h:2365
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95

◆ OleAdviseHolderImpl_Release()

static ULONG WINAPI OleAdviseHolderImpl_Release ( IOleAdviseHolder iface)
static

Definition at line 320 of file oleobj.c.

321 {
323  ULONG ref;
324  TRACE("(%p)->(ref=%d)\n", This, This->ref);
325  ref = InterlockedDecrement(&This->ref);
326 
328 
329  return ref;
330 }
static void OleAdviseHolderImpl_Destructor(OleAdviseHolderImpl *This)
Definition: oleobj.c:261
Definition: send.c:48
GLenum GLint ref
Definition: glext.h:6028
#define TRACE(s)
Definition: solgame.cpp:4
#define InterlockedDecrement
Definition: armddk.h:52
static OleAdviseHolderImpl * impl_from_IOleAdviseHolder(IOleAdviseHolder *iface)
Definition: oleobj.c:253
unsigned int ULONG
Definition: retypes.h:1

◆ OleAdviseHolderImpl_SendOnClose()

static HRESULT WINAPI OleAdviseHolderImpl_SendOnClose ( IOleAdviseHolder iface)
static

Definition at line 470 of file oleobj.c.

471 {
472  IEnumSTATDATA *pEnum;
473  HRESULT hr;
474 
475  TRACE("(%p)->()\n", iface);
476 
477  hr = IOleAdviseHolder_EnumAdvise(iface, &pEnum);
478  if (SUCCEEDED(hr))
479  {
480  STATDATA statdata;
481  while (IEnumSTATDATA_Next(pEnum, 1, &statdata, NULL) == S_OK)
482  {
483  IAdviseSink_OnClose(statdata.pAdvSink);
484 
485  IAdviseSink_Release(statdata.pAdvSink);
486  }
487  IEnumSTATDATA_Release(pEnum);
488  }
489 
490  return hr;
491 }
HRESULT hr
Definition: shlfolder.c:183
if SUCCEEDED(hr)
#define TRACE(s)
Definition: solgame.cpp:4
LONG HRESULT
Definition: typedefs.h:79
#define S_OK
Definition: intsafe.h:51
#define NULL
Definition: types.h:112

◆ OleAdviseHolderImpl_SendOnRename()

static HRESULT WINAPI OleAdviseHolderImpl_SendOnRename ( IOleAdviseHolder iface,
IMoniker pmk 
)
static

Definition at line 418 of file oleobj.c.

419 {
420  IEnumSTATDATA *pEnum;
421  HRESULT hr;
422 
423  TRACE("(%p)->(%p)\n", iface, pmk);
424 
425  hr = IOleAdviseHolder_EnumAdvise(iface, &pEnum);
426  if (SUCCEEDED(hr))
427  {
428  STATDATA statdata;
429  while (IEnumSTATDATA_Next(pEnum, 1, &statdata, NULL) == S_OK)
430  {
431  IAdviseSink_OnRename(statdata.pAdvSink, pmk);
432 
433  IAdviseSink_Release(statdata.pAdvSink);
434  }
435  IEnumSTATDATA_Release(pEnum);
436  }
437 
438  return hr;
439 }
HRESULT hr
Definition: shlfolder.c:183
if SUCCEEDED(hr)
#define TRACE(s)
Definition: solgame.cpp:4
LONG HRESULT
Definition: typedefs.h:79
#define S_OK
Definition: intsafe.h:51
#define NULL
Definition: types.h:112

◆ OleAdviseHolderImpl_SendOnSave()

static HRESULT WINAPI OleAdviseHolderImpl_SendOnSave ( IOleAdviseHolder iface)
static

Definition at line 444 of file oleobj.c.

445 {
446  IEnumSTATDATA *pEnum;
447  HRESULT hr;
448 
449  TRACE("(%p)->()\n", iface);
450 
451  hr = IOleAdviseHolder_EnumAdvise(iface, &pEnum);
452  if (SUCCEEDED(hr))
453  {
454  STATDATA statdata;
455  while (IEnumSTATDATA_Next(pEnum, 1, &statdata, NULL) == S_OK)
456  {
457  IAdviseSink_OnSave(statdata.pAdvSink);
458 
459  IAdviseSink_Release(statdata.pAdvSink);
460  }
461  IEnumSTATDATA_Release(pEnum);
462  }
463 
464  return hr;
465 }
HRESULT hr
Definition: shlfolder.c:183
if SUCCEEDED(hr)
#define TRACE(s)
Definition: solgame.cpp:4
LONG HRESULT
Definition: typedefs.h:79
#define S_OK
Definition: intsafe.h:51
#define NULL
Definition: types.h:112

◆ OleAdviseHolderImpl_Unadvise()

static HRESULT WINAPI OleAdviseHolderImpl_Unadvise ( IOleAdviseHolder iface,
DWORD  dwConnection 
)
static

Definition at line 379 of file oleobj.c.

381 {
383  DWORD index;
384 
385  TRACE("(%p)->(%u)\n", This, dwConnection);
386 
387  /* The connection number is 1 more than the index, see OleAdviseHolder_Advise */
388  index = dwConnection - 1;
389 
390  if (index >= This->max_cons || This->connections[index].pAdvSink == NULL)
391  return OLE_E_NOCONNECTION;
392 
393  release_statdata(This->connections + index);
394 
395  return S_OK;
396 }
static void release_statdata(STATDATA *data)
Definition: oleobj.c:42
#define OLE_E_NOCONNECTION
Definition: winerror.h:2618
GLuint index
Definition: glext.h:6031
#define TRACE(s)
Definition: solgame.cpp:4
unsigned long DWORD
Definition: ntddk_ex.h:95
#define index(s, c)
Definition: various.h:29
static OleAdviseHolderImpl * impl_from_IOleAdviseHolder(IOleAdviseHolder *iface)
Definition: oleobj.c:253
#define S_OK
Definition: intsafe.h:51
#define NULL
Definition: types.h:112

◆ release_statdata()

static void release_statdata ( STATDATA *  data)
static

Definition at line 42 of file oleobj.c.

43 {
44  CoTaskMemFree(data->formatetc.ptd);
45  data->formatetc.ptd = NULL;
46 
47  if(data->pAdvSink)
48  {
49  IAdviseSink_Release(data->pAdvSink);
50  data->pAdvSink = NULL;
51  }
52 }
VOID WINAPI CoTaskMemFree(LPVOID ptr)
Definition: ifs.c:442
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
#define NULL
Definition: types.h:112

Referenced by DataAdviseHolder_Destructor(), DataAdviseHolder_SendOnDataChange(), DataAdviseHolder_Unadvise(), EnumSTATDATA_Release(), OleAdviseHolderImpl_Destructor(), and OleAdviseHolderImpl_Unadvise().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( ole  )

Variable Documentation

◆ DataAdviseHolderImpl_VTable

const IDataAdviseHolderVtbl DataAdviseHolderImpl_VTable
static
Initial value:
=
{
}
static HRESULT WINAPI DataAdviseHolder_Unadvise(IDataAdviseHolder *iface, DWORD dwConnection)
Definition: oleobj.c:707
static ULONG WINAPI DataAdviseHolder_AddRef(IDataAdviseHolder *iface)
Definition: oleobj.c:609
static ULONG WINAPI DataAdviseHolder_Release(IDataAdviseHolder *iface)
Definition: oleobj.c:619
static HRESULT WINAPI DataAdviseHolder_EnumAdvise(IDataAdviseHolder *iface, IEnumSTATDATA **enum_advise)
Definition: oleobj.c:734
static HRESULT WINAPI DataAdviseHolder_Advise(IDataAdviseHolder *iface, IDataObject *pDataObject, FORMATETC *pFetc, DWORD advf, IAdviseSink *pAdvise, DWORD *pdwConnection)
Definition: oleobj.c:635
static HRESULT WINAPI DataAdviseHolder_SendOnDataChange(IDataAdviseHolder *iface, IDataObject *data_obj, DWORD dwReserved, DWORD advf)
Definition: oleobj.c:752
static HRESULT WINAPI DataAdviseHolder_QueryInterface(IDataAdviseHolder *iface, REFIID riid, void **ppvObject)
Definition: oleobj.c:580

Definition at line 795 of file oleobj.c.

Referenced by DataAdviseHolder_Constructor().

◆ EnumSTATDATA_VTable

const IEnumSTATDATAVtbl EnumSTATDATA_VTable
static
Initial value:
=
{
}
static HRESULT WINAPI EnumSTATDATA_Clone(IEnumSTATDATA *iface, IEnumSTATDATA **ppenum)
Definition: oleobj.c:178
static ULONG WINAPI EnumSTATDATA_Release(IEnumSTATDATA *iface)
Definition: oleobj.c:107
static HRESULT WINAPI EnumSTATDATA_QueryInterface(IEnumSTATDATA *iface, REFIID riid, void **ppv)
Definition: oleobj.c:87
static ULONG WINAPI EnumSTATDATA_AddRef(IEnumSTATDATA *iface)
Definition: oleobj.c:100
static HRESULT WINAPI EnumSTATDATA_Reset(IEnumSTATDATA *iface)
Definition: oleobj.c:168
static HRESULT WINAPI EnumSTATDATA_Next(IEnumSTATDATA *iface, ULONG num, LPSTATDATA data, ULONG *fetched)
Definition: oleobj.c:124
static HRESULT WINAPI EnumSTATDATA_Skip(IEnumSTATDATA *iface, ULONG num)
Definition: oleobj.c:152

Definition at line 186 of file oleobj.c.

Referenced by EnumSTATDATA_Construct().

◆ helpstring

typedef helpstring

◆ oahvt

const IOleAdviseHolderVtbl oahvt
static
Initial value:
=
{
}
static HRESULT WINAPI OleAdviseHolderImpl_QueryInterface(IOleAdviseHolder *iface, REFIID iid, void **obj)
Definition: oleobj.c:279
static ULONG WINAPI OleAdviseHolderImpl_Release(IOleAdviseHolder *iface)
Definition: oleobj.c:320
static HRESULT WINAPI OleAdviseHolderImpl_EnumAdvise(IOleAdviseHolder *iface, IEnumSTATDATA **enum_advise)
Definition: oleobj.c:401
static HRESULT WINAPI OleAdviseHolderImpl_SendOnSave(IOleAdviseHolder *iface)
Definition: oleobj.c:444
static HRESULT WINAPI OleAdviseHolderImpl_Advise(IOleAdviseHolder *iface, IAdviseSink *pAdvise, DWORD *pdwConnection)
Definition: oleobj.c:335
static ULONG WINAPI OleAdviseHolderImpl_AddRef(IOleAdviseHolder *iface)
Definition: oleobj.c:307
static HRESULT WINAPI OleAdviseHolderImpl_Unadvise(IOleAdviseHolder *iface, DWORD dwConnection)
Definition: oleobj.c:379
static HRESULT WINAPI OleAdviseHolderImpl_SendOnClose(IOleAdviseHolder *iface)
Definition: oleobj.c:470
static HRESULT WINAPI OleAdviseHolderImpl_SendOnRename(IOleAdviseHolder *iface, IMoniker *pmk)
Definition: oleobj.c:418

Definition at line 496 of file oleobj.c.

Referenced by OleAdviseHolderImpl_Constructor().