ReactOS 0.4.16-dev-2354-g16de117
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 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

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 38 of file oleobj.c.

◆ WINE_ADVF_REMOTE

#define WINE_ADVF_REMOTE   0x80000000

Definition at line 542 of file oleobj.c.

Function Documentation

◆ copy_statdata()

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

Definition at line 52 of file oleobj.c.

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

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

◆ CreateDataAdviseHolder()

HRESULT WINAPI CreateDataAdviseHolder ( IDataAdviseHolder **  ppDAHolder)

Definition at line 892 of file oleobj.c.

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

Referenced by DefaultHandler_DAdvise().

◆ CreateOleAdviseHolder()

HRESULT WINAPI CreateOleAdviseHolder ( IOleAdviseHolder **  ppOAHolder)

Definition at line 874 of file oleobj.c.

875{
876 TRACE("(%p)\n", ppOAHolder);
877
878 if (ppOAHolder==NULL)
879 return E_POINTER;
880
881 *ppOAHolder = OleAdviseHolderImpl_Constructor ();
882
883 if (*ppOAHolder != NULL)
884 return S_OK;
885
886 return E_OUTOFMEMORY;
887}
static IOleAdviseHolder * OleAdviseHolderImpl_Constructor(void)
Definition: oleobj.c:511

Referenced by DefaultHandler_Advise(), SEALED_::NeedAdviseHolder(), OleObject_Advise(), and testoleobj_IOleObject_Advise().

◆ DataAdviseHolder_AddRef()

static ULONG WINAPI DataAdviseHolder_AddRef ( IDataAdviseHolder iface)
static

Definition at line 607 of file oleobj.c.

608{
611 TRACE("%p, refcount %lu.\n", iface, ref);
612 return ref;
613}
#define InterlockedIncrement
Definition: armddk.h:53
static DataAdviseHolder * impl_from_IDataAdviseHolder(IDataAdviseHolder *iface)
Definition: oleobj.c:544
Definition: send.c:48
uint32_t ULONG
Definition: typedefs.h:59

◆ DataAdviseHolder_Advise()

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

Definition at line 634 of file oleobj.c.

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

◆ DataAdviseHolder_Constructor()

static IDataAdviseHolder * DataAdviseHolder_Constructor ( void  )
static

Definition at line 848 of file oleobj.c.

849{
850 DataAdviseHolder* newHolder;
851
852 newHolder = HeapAlloc(GetProcessHeap(), 0, sizeof(DataAdviseHolder));
853
855 newHolder->ref = 1;
856 newHolder->maxCons = INITIAL_SINKS;
858 newHolder->maxCons * sizeof(*newHolder->connections));
860 newHolder->maxCons * sizeof(*newHolder->remote_connections));
861 newHolder->delegate = NULL;
862
863 TRACE("returning %p\n", &newHolder->IDataAdviseHolder_iface);
864 return &newHolder->IDataAdviseHolder_iface;
865}
#define HeapAlloc
Definition: compat.h:733
static const IDataAdviseHolderVtbl DataAdviseHolderImpl_VTable
Definition: oleobj.c:794
IDataAdviseHolder IDataAdviseHolder_iface
Definition: oleobj.c:532
DWORD * remote_connections
Definition: oleobj.c:537
STATDATA * connections
Definition: oleobj.c:536
IDataObject * delegate
Definition: oleobj.c:538
DWORD maxCons
Definition: oleobj.c:535

Referenced by CreateDataAdviseHolder().

◆ DataAdviseHolder_Destructor()

static void DataAdviseHolder_Destructor ( DataAdviseHolder ptrToDestroy)
static

Definition at line 552 of file oleobj.c.

553{
554 DWORD index;
555 TRACE("%p\n", ptrToDestroy);
556
557 for (index = 0; index < ptrToDestroy->maxCons; index++)
558 {
559 if (ptrToDestroy->connections[index].pAdvSink != NULL)
560 {
561 if (ptrToDestroy->delegate &&
562 (ptrToDestroy->connections[index].advf & WINE_ADVF_REMOTE))
563 IDataObject_DUnadvise(ptrToDestroy->delegate,
564 ptrToDestroy->remote_connections[index]);
565
566 release_statdata(ptrToDestroy->connections + index);
567 }
568 }
569
570 HeapFree(GetProcessHeap(), 0, ptrToDestroy->remote_connections);
571 HeapFree(GetProcessHeap(), 0, ptrToDestroy->connections);
572 HeapFree(GetProcessHeap(), 0, ptrToDestroy);
573}
#define HeapFree(x, y, z)
Definition: compat.h:735
static void release_statdata(STATDATA *data)
Definition: oleobj.c:40

Referenced by DataAdviseHolder_Release().

◆ DataAdviseHolder_EnumAdvise()

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

Definition at line 733 of file oleobj.c.

735{
737 IUnknown *unk;
738 HRESULT hr;
739
740 TRACE("(%p)->(%p)\n", This, enum_advise);
741
742 IDataAdviseHolder_QueryInterface(iface, &IID_IUnknown, (void**)&unk);
743 hr = EnumSTATDATA_Construct(unk, 0, This->maxCons, This->connections, TRUE, enum_advise);
744 IUnknown_Release(unk);
745 return hr;
746}
const GUID IID_IUnknown
#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:195

◆ DataAdviseHolder_OnConnect()

HRESULT DataAdviseHolder_OnConnect ( IDataAdviseHolder iface,
IDataObject pDelegate 
)

Definition at line 805 of file oleobj.c.

806{
808 DWORD index;
809 HRESULT hr = S_OK;
810
811 for(index = 0; index < This->maxCons; index++)
812 {
813 if(This->connections[index].pAdvSink != NULL)
814 {
815 hr = IDataObject_DAdvise(pDelegate, &This->connections[index].formatetc,
816 This->connections[index].advf,
817 This->connections[index].pAdvSink,
818 &This->remote_connections[index]);
819 if (FAILED(hr)) break;
820 This->connections[index].advf |= WINE_ADVF_REMOTE;
821 }
822 }
823 This->delegate = pDelegate;
824 return hr;
825}

Referenced by DefaultHandler_DAdvise(), and DefaultHandler_Run().

◆ DataAdviseHolder_OnDisconnect()

void DataAdviseHolder_OnDisconnect ( IDataAdviseHolder iface)

Definition at line 827 of file oleobj.c.

828{
830 DWORD index;
831
832 for(index = 0; index < This->maxCons; index++)
833 {
834 if((This->connections[index].pAdvSink != NULL) &&
835 (This->connections[index].advf & WINE_ADVF_REMOTE))
836 {
837 IDataObject_DUnadvise(This->delegate, This->remote_connections[index]);
838 This->remote_connections[index] = 0;
839 This->connections[index].advf &= ~WINE_ADVF_REMOTE;
840 }
841 }
842 This->delegate = NULL;
843}

Referenced by DefaultHandler_Stop().

◆ DataAdviseHolder_QueryInterface()

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

Definition at line 578 of file oleobj.c.

580{
582 TRACE("(%p)->(%s,%p)\n",This,debugstr_guid(riid),ppvObject);
583
584 if ( (This==0) || (ppvObject==0) )
585 return E_INVALIDARG;
586
587 *ppvObject = 0;
588
589 if ( IsEqualIID(&IID_IUnknown, riid) ||
591 {
592 *ppvObject = iface;
593 }
594
595 if ((*ppvObject)==0)
596 {
597 return E_NOINTERFACE;
598 }
599
600 IUnknown_AddRef((IUnknown*)*ppvObject);
601 return S_OK;
602}
#define E_INVALIDARG
Definition: ddrawi.h:101
REFIID riid
Definition: atlbase.h:39
#define debugstr_guid
Definition: kernel32.h:35
const GUID IID_IDataAdviseHolder
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95
#define E_NOINTERFACE
Definition: winerror.h:3479

◆ DataAdviseHolder_Release()

static ULONG WINAPI DataAdviseHolder_Release ( IDataAdviseHolder iface)
static

Definition at line 618 of file oleobj.c.

619{
622
623 TRACE("%p, refcount %lu.\n", iface, ref);
624
626
627 return ref;
628}
#define InterlockedDecrement
Definition: armddk.h:52
static void DataAdviseHolder_Destructor(DataAdviseHolder *ptrToDestroy)
Definition: oleobj.c:552

◆ DataAdviseHolder_SendOnDataChange()

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

Definition at line 751 of file oleobj.c.

754{
755 IEnumSTATDATA *pEnum;
756 HRESULT hr;
757
758 TRACE("%p, %p, %#lx, %#lx.\n", iface, data_obj, dwReserved, advf);
759
760 hr = IDataAdviseHolder_EnumAdvise(iface, &pEnum);
761 if (SUCCEEDED(hr))
762 {
763 STATDATA statdata;
764 while (IEnumSTATDATA_Next(pEnum, 1, &statdata, NULL) == S_OK)
765 {
766 STGMEDIUM stg;
767 stg.tymed = TYMED_NULL;
768 stg.pstg = NULL;
769 stg.pUnkForRelease = NULL;
770
771 if(!(statdata.advf & ADVF_NODATA))
772 {
773 hr = IDataObject_GetData(data_obj, &statdata.formatetc, &stg);
774 }
775
776 IAdviseSink_OnDataChange(statdata.pAdvSink, &statdata.formatetc, &stg);
777
778 if(statdata.advf & ADVF_ONLYONCE)
779 {
780 IDataAdviseHolder_Unadvise(iface, statdata.dwConnection);
781 }
782
783 release_statdata(&statdata);
784 }
785 IEnumSTATDATA_Release(pEnum);
786 }
787
788 return S_OK;
789}
#define SUCCEEDED(hr)
Definition: intsafe.h:50
_In_ HANDLE _In_ DWORD _In_ DWORD _Inout_opt_ LPOVERLAPPED _In_opt_ LPTRANSMIT_FILE_BUFFERS _In_ DWORD dwReserved
Definition: mswsock.h:95

◆ DataAdviseHolder_Unadvise()

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

Definition at line 705 of file oleobj.c.

707{
709 DWORD index;
710
711 TRACE("%p, %lu.\n", iface, dwConnection);
712
713 /* The connection number is 1 more than the index, see DataAdviseHolder_Advise */
714 index = dwConnection - 1;
715
716 if (index >= This->maxCons || This->connections[index].pAdvSink == NULL)
717 return OLE_E_NOCONNECTION;
718
719 if (This->delegate && This->connections[index].advf & WINE_ADVF_REMOTE)
720 {
721 IDataObject_DUnadvise(This->delegate, This->remote_connections[index]);
722 This->remote_connections[index] = 0;
723 }
724
725 release_statdata(This->connections + index);
726
727 return S_OK;
728}
#define OLE_E_NOCONNECTION
Definition: winerror.h:3729

◆ EnumSTATDATA_AddRef()

static ULONG WINAPI EnumSTATDATA_AddRef ( IEnumSTATDATA iface)
static

Definition at line 98 of file oleobj.c.

99{
101 TRACE("()\n");
102 return InterlockedIncrement(&This->ref);
103}
static EnumSTATDATA * impl_from_IEnumSTATDATA(IEnumSTATDATA *iface)
Definition: oleobj.c:80

◆ EnumSTATDATA_Clone()

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

Definition at line 176 of file oleobj.c.

177{
179
180 return EnumSTATDATA_Construct(This->holder, This->index, This->num_of_elems, This->statdata,
181 TRUE, ppenum);
182}

◆ EnumSTATDATA_Construct()

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

Definition at line 195 of file oleobj.c.

197{
198 EnumSTATDATA *This = HeapAlloc(GetProcessHeap(), 0, sizeof(*This));
199 DWORD i, count;
200
201 if (!This) return E_OUTOFMEMORY;
202
203 This->IEnumSTATDATA_iface.lpVtbl = &EnumSTATDATA_VTable;
204 This->ref = 1;
205 This->index = index;
206
207 if (copy)
208 {
209 This->statdata = HeapAlloc(GetProcessHeap(), 0, array_len * sizeof(*This->statdata));
210 if(!This->statdata)
211 {
213 return E_OUTOFMEMORY;
214 }
215
216 for(i = 0, count = 0; i < array_len; i++)
217 {
218 if(data[i].pAdvSink)
219 {
220 copy_statdata(This->statdata + count, data + i);
221 count++;
222 }
223 }
224 }
225 else
226 {
227 This->statdata = data;
228 count = array_len;
229 }
230
231 This->num_of_elems = count;
232 This->holder = holder;
233 if (holder) IUnknown_AddRef(holder);
234 *ppenum = &This->IEnumSTATDATA_iface;
235 return S_OK;
236}
INT copy(TCHAR source[MAX_PATH], TCHAR dest[MAX_PATH], INT append, DWORD lpdwFlags, BOOL bTouch)
Definition: copy.c:51
GLuint GLuint GLsizei count
Definition: gl.h:1545
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
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 const IEnumSTATDATAVtbl EnumSTATDATA_VTable
Definition: oleobj.c:184

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 122 of file oleobj.c.

124{
126 DWORD count = 0;
127 HRESULT hr = S_OK;
128
129 TRACE("%p, %lu, %p, %p.\n", iface, num, data, fetched);
130
131 while(num--)
132 {
133 if (This->index >= This->num_of_elems)
134 {
135 hr = S_FALSE;
136 break;
137 }
138
139 copy_statdata(data + count, This->statdata + This->index);
140
141 count++;
142 This->index++;
143 }
144
145 if (fetched) *fetched = count;
146
147 return hr;
148}
GLuint GLuint num
Definition: glext.h:9618
#define S_FALSE
Definition: winerror.h:3451

◆ EnumSTATDATA_QueryInterface()

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

Definition at line 85 of file oleobj.c.

86{
87 TRACE("(%s, %p)\n", debugstr_guid(riid), ppv);
90 {
91 IEnumSTATDATA_AddRef(iface);
92 *ppv = iface;
93 return S_OK;
94 }
95 return E_NOINTERFACE;
96}
REFIID LPVOID * ppv
Definition: atlbase.h:39
const GUID IID_IEnumSTATDATA

◆ EnumSTATDATA_Release()

static ULONG WINAPI EnumSTATDATA_Release ( IEnumSTATDATA iface)
static

Definition at line 105 of file oleobj.c.

106{
108 LONG refs = InterlockedDecrement(&This->ref);
109 TRACE("()\n");
110 if (!refs)
111 {
112 DWORD i;
113 for(i = 0; i < This->num_of_elems; i++)
114 release_statdata(This->statdata + i);
115 HeapFree(GetProcessHeap(), 0, This->statdata);
116 if (This->holder) IUnknown_Release(This->holder);
118 }
119 return refs;
120}
long LONG
Definition: pedump.c:60

◆ EnumSTATDATA_Reset()

static HRESULT WINAPI EnumSTATDATA_Reset ( IEnumSTATDATA iface)
static

Definition at line 166 of file oleobj.c.

167{
169
170 TRACE("()\n");
171
172 This->index = 0;
173 return S_OK;
174}

◆ EnumSTATDATA_Skip()

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

Definition at line 150 of file oleobj.c.

151{
153
154 TRACE("%p, %lu.\n", iface, num);
155
156 if(This->index + num >= This->num_of_elems)
157 {
158 This->index = This->num_of_elems;
159 return S_FALSE;
160 }
161
162 This->index += num;
163 return S_OK;
164}

◆ impl_from_IDataAdviseHolder()

static DataAdviseHolder * impl_from_IDataAdviseHolder ( IDataAdviseHolder iface)
inlinestatic

◆ impl_from_IEnumSTATDATA()

static EnumSTATDATA * impl_from_IEnumSTATDATA ( IEnumSTATDATA iface)
inlinestatic

Definition at line 80 of file oleobj.c.

81{
82 return CONTAINING_RECORD(iface, EnumSTATDATA, IEnumSTATDATA_iface);
83}

Referenced by EnumSTATDATA_AddRef(), EnumSTATDATA_Clone(), EnumSTATDATA_Next(), EnumSTATDATA_Release(), EnumSTATDATA_Reset(), and EnumSTATDATA_Skip().

◆ impl_from_IOleAdviseHolder()

◆ OleAdviseHolderImpl_AddRef()

static ULONG WINAPI OleAdviseHolderImpl_AddRef ( IOleAdviseHolder iface)
static

Definition at line 305 of file oleobj.c.

306{
309
310 TRACE("%p, refcount %lu.\n", iface, ref);
311
312 return ref;
313}
static OleAdviseHolderImpl * impl_from_IOleAdviseHolder(IOleAdviseHolder *iface)
Definition: oleobj.c:251

◆ OleAdviseHolderImpl_Advise()

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

Definition at line 333 of file oleobj.c.

336{
337 DWORD index;
339 STATDATA new_conn;
340 static const FORMATETC empty_fmtetc = {0, NULL, 0, -1, 0};
341
342 TRACE("(%p)->(%p, %p)\n", This, pAdvise, pdwConnection);
343
344 if (pdwConnection==NULL)
345 return E_POINTER;
346
347 *pdwConnection = 0;
348
349 for (index = 0; index < This->max_cons; index++)
350 {
351 if (This->connections[index].pAdvSink == NULL)
352 break;
353 }
354
355 if (index == This->max_cons)
356 {
357 This->max_cons += INITIAL_SINKS;
358 This->connections = HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, This->connections,
359 This->max_cons * sizeof(*This->connections));
360 }
361
362 new_conn.pAdvSink = pAdvise;
363 new_conn.advf = 0;
364 new_conn.formatetc = empty_fmtetc;
365 new_conn.dwConnection = index + 1; /* 0 is not a valid cookie, so increment the index */
366
367 copy_statdata(This->connections + index, &new_conn);
368
369 *pdwConnection = new_conn.dwConnection;
370
371 return S_OK;
372}

◆ OleAdviseHolderImpl_Constructor()

static IOleAdviseHolder * OleAdviseHolderImpl_Constructor ( void  )
static

Definition at line 511 of file oleobj.c.

512{
513 OleAdviseHolderImpl* lpoah;
514
515 lpoah = HeapAlloc(GetProcessHeap(), 0, sizeof(OleAdviseHolderImpl));
516
517 lpoah->IOleAdviseHolder_iface.lpVtbl = &oahvt;
518 lpoah->ref = 1;
519 lpoah->max_cons = INITIAL_SINKS;
521 lpoah->max_cons * sizeof(*lpoah->connections));
522
523 TRACE("returning %p\n", &lpoah->IOleAdviseHolder_iface);
524 return &lpoah->IOleAdviseHolder_iface;
525}
static const IOleAdviseHolderVtbl oahvt
Definition: oleobj.c:494
STATDATA * connections
Definition: oleobj.c:248
IOleAdviseHolder IOleAdviseHolder_iface
Definition: oleobj.c:243

Referenced by CreateOleAdviseHolder().

◆ OleAdviseHolderImpl_Destructor()

static void OleAdviseHolderImpl_Destructor ( OleAdviseHolderImpl This)
static

Definition at line 259 of file oleobj.c.

260{
261 DWORD index;
262 TRACE("%p\n", This);
263
264 for (index = 0; index < This->max_cons; index++)
265 {
266 if (This->connections[index].pAdvSink != NULL)
267 release_statdata(This->connections + index);
268 }
269
270 HeapFree(GetProcessHeap(), 0, This->connections);
272}

Referenced by OleAdviseHolderImpl_Release().

◆ OleAdviseHolderImpl_EnumAdvise()

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

Definition at line 399 of file oleobj.c.

400{
402 IUnknown *unk;
403 HRESULT hr;
404
405 TRACE("(%p)->(%p)\n", This, enum_advise);
406
407 IOleAdviseHolder_QueryInterface(iface, &IID_IUnknown, (void**)&unk);
408 hr = EnumSTATDATA_Construct(unk, 0, This->max_cons, This->connections, TRUE, enum_advise);
409 IUnknown_Release(unk);
410 return hr;
411}

◆ OleAdviseHolderImpl_QueryInterface()

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

Definition at line 277 of file oleobj.c.

279{
281 TRACE("(%p)->(%s,%p)\n",This, debugstr_guid(iid), obj);
282
283 if (obj == NULL)
284 return E_POINTER;
285
286 *obj = NULL;
287
288 if (IsEqualIID(iid, &IID_IUnknown) ||
290 {
291 *obj = &This->IOleAdviseHolder_iface;
292 }
293
294 if(*obj == NULL)
295 return E_NOINTERFACE;
296
297 IUnknown_AddRef((IUnknown*)*obj);
298
299 return S_OK;
300}
const GUID IID_IOleAdviseHolder

◆ OleAdviseHolderImpl_Release()

static ULONG WINAPI OleAdviseHolderImpl_Release ( IOleAdviseHolder iface)
static

Definition at line 318 of file oleobj.c.

319{
322
323 TRACE("%p, refcount %lu.\n", iface, ref);
324
326
327 return ref;
328}
static void OleAdviseHolderImpl_Destructor(OleAdviseHolderImpl *This)
Definition: oleobj.c:259

◆ OleAdviseHolderImpl_SendOnClose()

static HRESULT WINAPI OleAdviseHolderImpl_SendOnClose ( IOleAdviseHolder iface)
static

Definition at line 468 of file oleobj.c.

469{
470 IEnumSTATDATA *pEnum;
471 HRESULT hr;
472
473 TRACE("(%p)->()\n", iface);
474
475 hr = IOleAdviseHolder_EnumAdvise(iface, &pEnum);
476 if (SUCCEEDED(hr))
477 {
478 STATDATA statdata;
479 while (IEnumSTATDATA_Next(pEnum, 1, &statdata, NULL) == S_OK)
480 {
481 IAdviseSink_OnClose(statdata.pAdvSink);
482
483 IAdviseSink_Release(statdata.pAdvSink);
484 }
485 IEnumSTATDATA_Release(pEnum);
486 }
487
488 return hr;
489}

◆ OleAdviseHolderImpl_SendOnRename()

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

Definition at line 416 of file oleobj.c.

417{
418 IEnumSTATDATA *pEnum;
419 HRESULT hr;
420
421 TRACE("(%p)->(%p)\n", iface, pmk);
422
423 hr = IOleAdviseHolder_EnumAdvise(iface, &pEnum);
424 if (SUCCEEDED(hr))
425 {
426 STATDATA statdata;
427 while (IEnumSTATDATA_Next(pEnum, 1, &statdata, NULL) == S_OK)
428 {
429 IAdviseSink_OnRename(statdata.pAdvSink, pmk);
430
431 IAdviseSink_Release(statdata.pAdvSink);
432 }
433 IEnumSTATDATA_Release(pEnum);
434 }
435
436 return hr;
437}

◆ OleAdviseHolderImpl_SendOnSave()

static HRESULT WINAPI OleAdviseHolderImpl_SendOnSave ( IOleAdviseHolder iface)
static

Definition at line 442 of file oleobj.c.

443{
444 IEnumSTATDATA *pEnum;
445 HRESULT hr;
446
447 TRACE("(%p)->()\n", iface);
448
449 hr = IOleAdviseHolder_EnumAdvise(iface, &pEnum);
450 if (SUCCEEDED(hr))
451 {
452 STATDATA statdata;
453 while (IEnumSTATDATA_Next(pEnum, 1, &statdata, NULL) == S_OK)
454 {
455 IAdviseSink_OnSave(statdata.pAdvSink);
456
457 IAdviseSink_Release(statdata.pAdvSink);
458 }
459 IEnumSTATDATA_Release(pEnum);
460 }
461
462 return hr;
463}

◆ OleAdviseHolderImpl_Unadvise()

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

Definition at line 377 of file oleobj.c.

379{
381 DWORD index;
382
383 TRACE("%p, %lu.\n", iface, dwConnection);
384
385 /* The connection number is 1 more than the index, see OleAdviseHolder_Advise */
386 index = dwConnection - 1;
387
388 if (index >= This->max_cons || This->connections[index].pAdvSink == NULL)
389 return OLE_E_NOCONNECTION;
390
391 release_statdata(This->connections + index);
392
393 return S_OK;
394}

◆ release_statdata()

static void release_statdata ( STATDATA *  data)
static

Definition at line 40 of file oleobj.c.

41{
42 CoTaskMemFree(data->formatetc.ptd);
43 data->formatetc.ptd = NULL;
44
45 if(data->pAdvSink)
46 {
47 IAdviseSink_Release(data->pAdvSink);
48 data->pAdvSink = NULL;
49 }
50}
void WINAPI CoTaskMemFree(void *ptr)
Definition: malloc.c:389

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_SendOnDataChange(IDataAdviseHolder *iface, IDataObject *data_obj, DWORD dwReserved, DWORD advf)
Definition: oleobj.c:751
static HRESULT WINAPI DataAdviseHolder_QueryInterface(IDataAdviseHolder *iface, REFIID riid, void **ppvObject)
Definition: oleobj.c:578
static HRESULT WINAPI DataAdviseHolder_EnumAdvise(IDataAdviseHolder *iface, IEnumSTATDATA **enum_advise)
Definition: oleobj.c:733
static ULONG WINAPI DataAdviseHolder_Release(IDataAdviseHolder *iface)
Definition: oleobj.c:618
static ULONG WINAPI DataAdviseHolder_AddRef(IDataAdviseHolder *iface)
Definition: oleobj.c:607
static HRESULT WINAPI DataAdviseHolder_Advise(IDataAdviseHolder *iface, IDataObject *pDataObject, FORMATETC *pFetc, DWORD advf, IAdviseSink *pAdvise, DWORD *pdwConnection)
Definition: oleobj.c:634
static HRESULT WINAPI DataAdviseHolder_Unadvise(IDataAdviseHolder *iface, DWORD dwConnection)
Definition: oleobj.c:705

Definition at line 794 of file oleobj.c.

Referenced by DataAdviseHolder_Constructor().

◆ EnumSTATDATA_VTable

const IEnumSTATDATAVtbl EnumSTATDATA_VTable
static
Initial value:
=
{
}
static HRESULT WINAPI EnumSTATDATA_Next(IEnumSTATDATA *iface, ULONG num, LPSTATDATA data, ULONG *fetched)
Definition: oleobj.c:122
static HRESULT WINAPI EnumSTATDATA_QueryInterface(IEnumSTATDATA *iface, REFIID riid, void **ppv)
Definition: oleobj.c:85
static HRESULT WINAPI EnumSTATDATA_Clone(IEnumSTATDATA *iface, IEnumSTATDATA **ppenum)
Definition: oleobj.c:176
static HRESULT WINAPI EnumSTATDATA_Reset(IEnumSTATDATA *iface)
Definition: oleobj.c:166
static ULONG WINAPI EnumSTATDATA_AddRef(IEnumSTATDATA *iface)
Definition: oleobj.c:98
static HRESULT WINAPI EnumSTATDATA_Skip(IEnumSTATDATA *iface, ULONG num)
Definition: oleobj.c:150
static ULONG WINAPI EnumSTATDATA_Release(IEnumSTATDATA *iface)
Definition: oleobj.c:105

Definition at line 184 of file oleobj.c.

Referenced by EnumSTATDATA_Construct().

◆ oahvt

const IOleAdviseHolderVtbl oahvt
static
Initial value:
=
{
}
static ULONG WINAPI OleAdviseHolderImpl_Release(IOleAdviseHolder *iface)
Definition: oleobj.c:318
static HRESULT WINAPI OleAdviseHolderImpl_Unadvise(IOleAdviseHolder *iface, DWORD dwConnection)
Definition: oleobj.c:377
static HRESULT WINAPI OleAdviseHolderImpl_SendOnSave(IOleAdviseHolder *iface)
Definition: oleobj.c:442
static HRESULT WINAPI OleAdviseHolderImpl_SendOnRename(IOleAdviseHolder *iface, IMoniker *pmk)
Definition: oleobj.c:416
static HRESULT WINAPI OleAdviseHolderImpl_EnumAdvise(IOleAdviseHolder *iface, IEnumSTATDATA **enum_advise)
Definition: oleobj.c:399
static HRESULT WINAPI OleAdviseHolderImpl_QueryInterface(IOleAdviseHolder *iface, REFIID iid, void **obj)
Definition: oleobj.c:277
static HRESULT WINAPI OleAdviseHolderImpl_SendOnClose(IOleAdviseHolder *iface)
Definition: oleobj.c:468
static HRESULT WINAPI OleAdviseHolderImpl_Advise(IOleAdviseHolder *iface, IAdviseSink *pAdvise, DWORD *pdwConnection)
Definition: oleobj.c:333
static ULONG WINAPI OleAdviseHolderImpl_AddRef(IOleAdviseHolder *iface)
Definition: oleobj.c:305

Definition at line 494 of file oleobj.c.

Referenced by OleAdviseHolderImpl_Constructor().