ReactOS  0.4.14-dev-552-g2fad488
connpt.c File Reference
#include <assert.h>
#include <stdarg.h>
#include <string.h>
#include "winerror.h"
#include "windef.h"
#include "winbase.h"
#include "wingdi.h"
#include "winuser.h"
#include "ole2.h"
#include "olectl.h"
#include "connpt.h"
#include "wine/debug.h"
Include dependency graph for connpt.c:

Go to the source code of this file.

Classes

struct  ConnectionPointImpl
 
struct  EnumConnectionsImpl
 

Macros

#define COBJMACROS
 
#define MAXSINKS   10
 

Typedefs

typedef struct ConnectionPointImpl ConnectionPointImpl
 
typedef struct EnumConnectionsImpl EnumConnectionsImpl
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (ole)
 
static EnumConnectionsImplEnumConnectionsImpl_Construct (IUnknown *pUnk, DWORD nSinks, CONNECTDATA *pCD)
 
static ConnectionPointImplimpl_from_IConnectionPoint (IConnectionPoint *iface)
 
static EnumConnectionsImplimpl_from_IEnumConnections (IEnumConnections *iface)
 
static void ConnectionPointImpl_Destroy (ConnectionPointImpl *Obj)
 
static HRESULT WINAPI ConnectionPointImpl_QueryInterface (IConnectionPoint *iface, REFIID riid, void **ppvObject)
 
static ULONG WINAPI ConnectionPointImpl_AddRef (IConnectionPoint *iface)
 
static ULONG WINAPI ConnectionPointImpl_Release (IConnectionPoint *iface)
 
static HRESULT WINAPI ConnectionPointImpl_GetConnectionInterface (IConnectionPoint *iface, IID *piid)
 
static HRESULT WINAPI ConnectionPointImpl_GetConnectionPointContainer (IConnectionPoint *iface, IConnectionPointContainer **ppCPC)
 
static HRESULT WINAPI ConnectionPointImpl_Advise (IConnectionPoint *iface, IUnknown *lpUnk, DWORD *pdwCookie)
 
static HRESULT WINAPI ConnectionPointImpl_Unadvise (IConnectionPoint *iface, DWORD dwCookie)
 
static HRESULT WINAPI ConnectionPointImpl_EnumConnections (IConnectionPoint *iface, LPENUMCONNECTIONS *ppEnum)
 
static void EnumConnectionsImpl_Destroy (EnumConnectionsImpl *Obj)
 
static HRESULT WINAPI EnumConnectionsImpl_QueryInterface (IEnumConnections *iface, REFIID riid, void **ppvObject)
 
static ULONG WINAPI EnumConnectionsImpl_AddRef (IEnumConnections *iface)
 
static ULONG WINAPI EnumConnectionsImpl_Release (IEnumConnections *iface)
 
static HRESULT WINAPI EnumConnectionsImpl_Next (IEnumConnections *iface, ULONG cConn, LPCONNECTDATA pCD, ULONG *pEnum)
 
static HRESULT WINAPI EnumConnectionsImpl_Skip (IEnumConnections *iface, ULONG cSkip)
 
static HRESULT WINAPI EnumConnectionsImpl_Reset (IEnumConnections *iface)
 
static HRESULT WINAPI EnumConnectionsImpl_Clone (IEnumConnections *iface, LPENUMCONNECTIONS *ppEnum)
 
HRESULT CreateConnectionPoint (IUnknown *pUnk, REFIID riid, IConnectionPoint **pCP)
 

Variables

static const IConnectionPointVtbl ConnectionPointImpl_VTable
 
static const IEnumConnectionsVtbl EnumConnectionsImpl_VTable
 

Macro Definition Documentation

◆ COBJMACROS

#define COBJMACROS

Definition at line 29 of file connpt.c.

◆ MAXSINKS

#define MAXSINKS   10

Definition at line 44 of file connpt.c.

Typedef Documentation

◆ ConnectionPointImpl

◆ EnumConnectionsImpl

Function Documentation

◆ ConnectionPointImpl_AddRef()

static ULONG WINAPI ConnectionPointImpl_AddRef ( IConnectionPoint iface)
static

Definition at line 169 of file connpt.c.

170 {
172  ULONG refCount = InterlockedIncrement(&This->ref);
173 
174  TRACE("(%p)->(ref before=%d)\n", This, refCount - 1);
175 
176  return refCount;
177 }
static ConnectionPointImpl * impl_from_IConnectionPoint(IConnectionPoint *iface)
Definition: connpt.c:94
IUnknown * iface
#define TRACE(s)
Definition: solgame.cpp:4
#define InterlockedIncrement
Definition: armddk.h:53
unsigned int ULONG
Definition: retypes.h:1

◆ ConnectionPointImpl_Advise()

static HRESULT WINAPI ConnectionPointImpl_Advise ( IConnectionPoint iface,
IUnknown lpUnk,
DWORD pdwCookie 
)
static

Definition at line 232 of file connpt.c.

235 {
236  DWORD i;
238  IUnknown *lpSink;
239  TRACE("(%p)->(%p, %p)\n", This, lpUnk, pdwCookie);
240 
241  *pdwCookie = 0;
242  if(FAILED(IUnknown_QueryInterface(lpUnk, &This->iid, (void**)&lpSink)))
244 
245  for(i = 0; i < This->maxSinks; i++) {
246  if(This->sinks[i] == NULL)
247  break;
248  }
249  if(i == This->maxSinks) {
250  This->maxSinks += MAXSINKS;
252  This->maxSinks * sizeof(IUnknown *));
253  }
254  This->sinks[i] = lpSink;
255  This->nSinks++;
256  *pdwCookie = i + 1;
257  return S_OK;
258 }
static ConnectionPointImpl * impl_from_IConnectionPoint(IConnectionPoint *iface)
Definition: connpt.c:94
#define CONNECT_E_CANNOTCONNECT
Definition: olectl.h:253
IUnknown * iface
#define MAXSINKS
Definition: connpt.c:44
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
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4
#define GetProcessHeap()
Definition: compat.h:403
unsigned long DWORD
Definition: ntddk_ex.h:95
#define S_OK
Definition: intsafe.h:59
#define HeapReAlloc
Definition: compat.h:401
#define HEAP_ZERO_MEMORY
Definition: compat.h:123

◆ ConnectionPointImpl_Destroy()

static void ConnectionPointImpl_Destroy ( ConnectionPointImpl Obj)
static

Definition at line 107 of file connpt.c.

108 {
109  DWORD i;
110  for(i = 0; i < Obj->maxSinks; i++) {
111  if(Obj->sinks[i]) {
112  IUnknown_Release(Obj->sinks[i]);
113  Obj->sinks[i] = NULL;
114  }
115  }
116  HeapFree(GetProcessHeap(), 0, Obj->sinks);
117  HeapFree(GetProcessHeap(), 0, Obj);
118  return;
119 }
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
smooth NULL
Definition: ftsmooth.c:416
#define GetProcessHeap()
Definition: compat.h:403
unsigned long DWORD
Definition: ntddk_ex.h:95
#define HeapFree(x, y, z)
Definition: compat.h:402

Referenced by ConnectionPointImpl_Release().

◆ ConnectionPointImpl_EnumConnections()

static HRESULT WINAPI ConnectionPointImpl_EnumConnections ( IConnectionPoint iface,
LPENUMCONNECTIONS *  ppEnum 
)
static

Definition at line 285 of file connpt.c.

288 {
290  CONNECTDATA *pCD;
291  DWORD i, nextslot;
292  EnumConnectionsImpl *EnumObj;
293  HRESULT hr;
294 
295  TRACE("(%p)->(%p)\n", This, ppEnum);
296 
297  *ppEnum = NULL;
298 
299  if(This->nSinks == 0) return OLE_E_NOCONNECTION;
300 
301  pCD = HeapAlloc(GetProcessHeap(), 0, sizeof(CONNECTDATA) * This->nSinks);
302 
303  for(i = 0, nextslot = 0; i < This->maxSinks; i++) {
304  if(This->sinks[i] != NULL) {
305  pCD[nextslot].pUnk = This->sinks[i];
306  pCD[nextslot].dwCookie = i + 1;
307  nextslot++;
308  }
309  }
310  assert(nextslot == This->nSinks);
311 
312  /* Bump the ref count of this object up by one. It gets Released in
313  IEnumConnections_Release */
314  IConnectionPoint_AddRef(iface);
315 
316  EnumObj = EnumConnectionsImpl_Construct((IUnknown*)iface, This->nSinks, pCD);
317  hr = IEnumConnections_QueryInterface(&EnumObj->IEnumConnections_iface,
318  &IID_IEnumConnections, (void**)ppEnum);
319  IEnumConnections_Release(&EnumObj->IEnumConnections_iface);
320 
321  HeapFree(GetProcessHeap(), 0, pCD);
322  return hr;
323 }
static ConnectionPointImpl * impl_from_IConnectionPoint(IConnectionPoint *iface)
Definition: connpt.c:94
HRESULT hr
Definition: shlfolder.c:183
IUnknown * iface
#define assert(x)
Definition: debug.h:53
const GUID IID_IEnumConnections
#define OLE_E_NOCONNECTION
Definition: winerror.h:2618
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
IEnumConnections IEnumConnections_iface
Definition: connpt.c:74
smooth NULL
Definition: ftsmooth.c:416
static EnumConnectionsImpl * EnumConnectionsImpl_Construct(IUnknown *pUnk, DWORD nSinks, CONNECTDATA *pCD)
Definition: connpt.c:343
#define TRACE(s)
Definition: solgame.cpp:4
#define GetProcessHeap()
Definition: compat.h:403
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
LONG HRESULT
Definition: typedefs.h:77
unsigned long DWORD
Definition: ntddk_ex.h:95
#define HeapFree(x, y, z)
Definition: compat.h:402

◆ ConnectionPointImpl_GetConnectionInterface()

static HRESULT WINAPI ConnectionPointImpl_GetConnectionInterface ( IConnectionPoint iface,
IID piid 
)
static

Definition at line 204 of file connpt.c.

207 {
209  TRACE("(%p)->(%p) returning %s\n", This, piid, debugstr_guid(&(This->iid)));
210  *piid = This->iid;
211  return S_OK;
212 }
static ConnectionPointImpl * impl_from_IConnectionPoint(IConnectionPoint *iface)
Definition: connpt.c:94
IUnknown * iface
#define debugstr_guid
Definition: kernel32.h:35
#define TRACE(s)
Definition: solgame.cpp:4
#define S_OK
Definition: intsafe.h:59

◆ ConnectionPointImpl_GetConnectionPointContainer()

static HRESULT WINAPI ConnectionPointImpl_GetConnectionPointContainer ( IConnectionPoint iface,
IConnectionPointContainer **  ppCPC 
)
static

Definition at line 218 of file connpt.c.

221 {
223  TRACE("(%p)->(%p)\n", This, ppCPC);
224 
225  return IUnknown_QueryInterface(This->Obj, &IID_IConnectionPointContainer, (void**)ppCPC);
226 }
static ConnectionPointImpl * impl_from_IConnectionPoint(IConnectionPoint *iface)
Definition: connpt.c:94
IUnknown * iface
const GUID IID_IConnectionPointContainer
#define TRACE(s)
Definition: solgame.cpp:4

◆ ConnectionPointImpl_QueryInterface()

static HRESULT WINAPI ConnectionPointImpl_QueryInterface ( IConnectionPoint iface,
REFIID  riid,
void **  ppvObject 
)
static

Definition at line 126 of file connpt.c.

130 {
132  TRACE("(%p)->(%s, %p)\n", This, debugstr_guid(riid), ppvObject);
133 
134  /*
135  * Perform a sanity check on the parameters.
136  */
137  if (!ppvObject)
138  return E_INVALIDARG;
139 
140  /*
141  * Initialize the return parameter.
142  */
143  *ppvObject = 0;
144 
145 
147  *ppvObject = iface;
148 
149  /*
150  * Check that we obtained an interface.
151  */
152  if ((*ppvObject)==0)
153  {
154  FIXME("() : asking for unsupported interface %s\n", debugstr_guid(riid));
155  return E_NOINTERFACE;
156  }
157 
158  IUnknown_AddRef((IUnknown*)*ppvObject);
159 
160  return S_OK;
161 }
#define E_NOINTERFACE
Definition: winerror.h:2364
static ConnectionPointImpl * impl_from_IConnectionPoint(IConnectionPoint *iface)
Definition: connpt.c:94
REFIID riid
Definition: precomp.h:44
IUnknown * iface
#define FIXME(fmt,...)
Definition: debug.h:110
#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
const GUID IID_IConnectionPoint
#define S_OK
Definition: intsafe.h:59
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95

◆ ConnectionPointImpl_Release()

static ULONG WINAPI ConnectionPointImpl_Release ( IConnectionPoint iface)
static

Definition at line 184 of file connpt.c.

186 {
188  ULONG refCount = InterlockedDecrement(&This->ref);
189 
190  TRACE("(%p)->(ref before=%d)\n", This, refCount + 1);
191 
192  /*
193  * If the reference count goes down to 0, perform suicide.
194  */
195  if (!refCount) ConnectionPointImpl_Destroy(This);
196 
197  return refCount;
198 }
static ConnectionPointImpl * impl_from_IConnectionPoint(IConnectionPoint *iface)
Definition: connpt.c:94
IUnknown * iface
#define TRACE(s)
Definition: solgame.cpp:4
#define InterlockedDecrement
Definition: armddk.h:52
static void ConnectionPointImpl_Destroy(ConnectionPointImpl *Obj)
Definition: connpt.c:107
unsigned int ULONG
Definition: retypes.h:1

◆ ConnectionPointImpl_Unadvise()

static HRESULT WINAPI ConnectionPointImpl_Unadvise ( IConnectionPoint iface,
DWORD  dwCookie 
)
static

Definition at line 265 of file connpt.c.

267 {
269  TRACE("(%p)->(%d)\n", This, dwCookie);
270 
271  if(dwCookie == 0 || dwCookie > This->maxSinks) return E_INVALIDARG;
272 
273  if(This->sinks[dwCookie-1] == NULL) return CONNECT_E_NOCONNECTION;
274 
275  IUnknown_Release(This->sinks[dwCookie-1]);
276  This->sinks[dwCookie-1] = NULL;
277  This->nSinks--;
278  return S_OK;
279 }
static ConnectionPointImpl * impl_from_IConnectionPoint(IConnectionPoint *iface)
Definition: connpt.c:94
IUnknown * iface
#define CONNECT_E_NOCONNECTION
Definition: olectl.h:251
#define E_INVALIDARG
Definition: ddrawi.h:101
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4
#define S_OK
Definition: intsafe.h:59

◆ CreateConnectionPoint()

HRESULT CreateConnectionPoint ( IUnknown pUnk,
REFIID  riid,
IConnectionPoint **  pCP 
)

Definition at line 572 of file connpt.c.

574 {
576 
577  TRACE("(%p %s %p)\n", pUnk, debugstr_guid(riid), pCP);
578 
579  *pCP = NULL;
580  Obj = HeapAlloc(GetProcessHeap(), 0, sizeof(*Obj));
581  if (!Obj)
582  return E_OUTOFMEMORY;
583 
584  Obj->IConnectionPoint_iface.lpVtbl = &ConnectionPointImpl_VTable;
585  Obj->Obj = pUnk;
586  Obj->ref = 1;
587  Obj->iid = *riid;
588  Obj->maxSinks = MAXSINKS;
590  Obj->nSinks = 0;
591 
592  *pCP = &Obj->IConnectionPoint_iface;
593  return S_OK;
594 }
REFIID riid
Definition: precomp.h:44
Obj()
Definition: swap_test.cpp:67
#define MAXSINKS
Definition: connpt.c:44
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
smooth NULL
Definition: ftsmooth.c:416
#define debugstr_guid
Definition: kernel32.h:35
#define TRACE(s)
Definition: solgame.cpp:4
#define GetProcessHeap()
Definition: compat.h:403
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
static const IConnectionPointVtbl ConnectionPointImpl_VTable
Definition: connpt.c:325
#define S_OK
Definition: intsafe.h:59
#define HEAP_ZERO_MEMORY
Definition: compat.h:123
static void *static void *static LPDIRECTPLAY IUnknown * pUnk
Definition: dplayx.c:30

Referenced by OLEFontImpl_Clone(), OLEFontImpl_Construct(), and OLEPictureImpl_Construct().

◆ EnumConnectionsImpl_AddRef()

static ULONG WINAPI EnumConnectionsImpl_AddRef ( IEnumConnections iface)
static

Definition at line 426 of file connpt.c.

427 {
429  ULONG refCount = InterlockedIncrement(&This->ref);
430 
431  TRACE("(%p)->(ref before=%d)\n", This, refCount - 1);
432 
433  IUnknown_AddRef(This->pUnk);
434  return refCount;
435 }
IUnknown * iface
#define TRACE(s)
Definition: solgame.cpp:4
static EnumConnectionsImpl * impl_from_IEnumConnections(IEnumConnections *iface)
Definition: connpt.c:99
#define InterlockedIncrement
Definition: armddk.h:53
unsigned int ULONG
Definition: retypes.h:1

◆ EnumConnectionsImpl_Clone()

static HRESULT WINAPI EnumConnectionsImpl_Clone ( IEnumConnections iface,
LPENUMCONNECTIONS *  ppEnum 
)
static

Definition at line 533 of file connpt.c.

535 {
537  EnumConnectionsImpl *newObj;
538  TRACE("(%p)->(%p)\n", This, ppEnum);
539 
540  newObj = EnumConnectionsImpl_Construct(This->pUnk, This->nConns, This->pCD);
541  newObj->nCur = This->nCur;
542  *ppEnum = &newObj->IEnumConnections_iface;
543  IUnknown_AddRef(This->pUnk);
544  return S_OK;
545 }
IUnknown * iface
IEnumConnections IEnumConnections_iface
Definition: connpt.c:74
static EnumConnectionsImpl * EnumConnectionsImpl_Construct(IUnknown *pUnk, DWORD nSinks, CONNECTDATA *pCD)
Definition: connpt.c:343
#define TRACE(s)
Definition: solgame.cpp:4
static EnumConnectionsImpl * impl_from_IEnumConnections(IEnumConnections *iface)
Definition: connpt.c:99
#define S_OK
Definition: intsafe.h:59

◆ EnumConnectionsImpl_Construct()

static EnumConnectionsImpl * EnumConnectionsImpl_Construct ( IUnknown pUnk,
DWORD  nSinks,
CONNECTDATA *  pCD 
)
static

Definition at line 343 of file connpt.c.

346 {
348  DWORD i;
349 
350  Obj->IEnumConnections_iface.lpVtbl = &EnumConnectionsImpl_VTable;
351  Obj->ref = 1;
352  Obj->pUnk = pUnk;
353  Obj->pCD = HeapAlloc(GetProcessHeap(), 0, nSinks * sizeof(CONNECTDATA));
354  Obj->nConns = nSinks;
355  Obj->nCur = 0;
356 
357  for(i = 0; i < nSinks; i++) {
358  Obj->pCD[i] = pCD[i];
359  IUnknown_AddRef(Obj->pCD[i].pUnk);
360  }
361  return Obj;
362 }
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 GetProcessHeap()
Definition: compat.h:403
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
unsigned long DWORD
Definition: ntddk_ex.h:95
static const IEnumConnectionsVtbl EnumConnectionsImpl_VTable
Definition: connpt.c:338
static void *static void *static LPDIRECTPLAY IUnknown * pUnk
Definition: dplayx.c:30

Referenced by ConnectionPointImpl_EnumConnections(), and EnumConnectionsImpl_Clone().

◆ EnumConnectionsImpl_Destroy()

static void EnumConnectionsImpl_Destroy ( EnumConnectionsImpl Obj)
static

Definition at line 367 of file connpt.c.

368 {
369  DWORD i;
370 
371  for(i = 0; i < Obj->nConns; i++)
372  IUnknown_Release(Obj->pCD[i].pUnk);
373 
374  HeapFree(GetProcessHeap(), 0, Obj->pCD);
375  HeapFree(GetProcessHeap(), 0, Obj);
376  return;
377 }
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 GetProcessHeap()
Definition: compat.h:403
unsigned long DWORD
Definition: ntddk_ex.h:95
#define HeapFree(x, y, z)
Definition: compat.h:402

Referenced by EnumConnectionsImpl_Release().

◆ EnumConnectionsImpl_Next()

static HRESULT WINAPI EnumConnectionsImpl_Next ( IEnumConnections iface,
ULONG  cConn,
LPCONNECTDATA  pCD,
ULONG pEnum 
)
static

Definition at line 463 of file connpt.c.

466 {
468  DWORD nRet = 0;
469  TRACE("(%p)->(%d, %p, %p)\n", This, cConn, pCD, pEnum);
470 
471  if(pEnum == NULL) {
472  if(cConn != 1)
473  return E_POINTER;
474  } else
475  *pEnum = 0;
476 
477  if(This->nCur >= This->nConns)
478  return S_FALSE;
479 
480  while(This->nCur < This->nConns && cConn) {
481  *pCD++ = This->pCD[This->nCur];
482  IUnknown_AddRef(This->pCD[This->nCur].pUnk);
483  This->nCur++;
484  cConn--;
485  nRet++;
486  }
487 
488  if(pEnum)
489  *pEnum = nRet;
490 
491  return S_OK;
492 }
IUnknown * iface
#define S_FALSE
Definition: winerror.h:2357
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4
unsigned long DWORD
Definition: ntddk_ex.h:95
static EnumConnectionsImpl * impl_from_IEnumConnections(IEnumConnections *iface)
Definition: connpt.c:99
#define S_OK
Definition: intsafe.h:59
#define E_POINTER
Definition: winerror.h:2365

◆ EnumConnectionsImpl_QueryInterface()

static HRESULT WINAPI EnumConnectionsImpl_QueryInterface ( IEnumConnections iface,
REFIID  riid,
void **  ppvObject 
)
static

Definition at line 384 of file connpt.c.

388 {
390  TRACE("(%p)->(%s, %p)\n", This, debugstr_guid(riid), ppvObject);
391 
392  /*
393  * Perform a sanity check on the parameters.
394  */
395  if (!ppvObject)
396  return E_INVALIDARG;
397 
398  /*
399  * Initialize the return parameter.
400  */
401  *ppvObject = 0;
402 
404  *ppvObject = iface;
405 
406  /*
407  * Check that we obtained an interface.
408  */
409  if ((*ppvObject)==0)
410  {
411  FIXME("() : asking for unsupported interface %s\n", debugstr_guid(riid));
412  return E_NOINTERFACE;
413  }
414 
415  IUnknown_AddRef((IUnknown*)*ppvObject);
416 
417  return S_OK;
418 }
#define E_NOINTERFACE
Definition: winerror.h:2364
REFIID riid
Definition: precomp.h:44
IUnknown * iface
const GUID IID_IEnumConnections
#define FIXME(fmt,...)
Definition: debug.h:110
#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:59
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95

◆ EnumConnectionsImpl_Release()

static ULONG WINAPI EnumConnectionsImpl_Release ( IEnumConnections iface)
static

Definition at line 442 of file connpt.c.

443 {
445  ULONG refCount = InterlockedDecrement(&This->ref);
446 
447  TRACE("(%p)->(ref before=%d)\n", This, refCount + 1);
448 
449  IUnknown_Release(This->pUnk);
450 
451  /*
452  * If the reference count goes down to 0, perform suicide.
453  */
454  if (!refCount) EnumConnectionsImpl_Destroy(This);
455 
456  return refCount;
457 }
IUnknown * iface
#define TRACE(s)
Definition: solgame.cpp:4
static EnumConnectionsImpl * impl_from_IEnumConnections(IEnumConnections *iface)
Definition: connpt.c:99
#define InterlockedDecrement
Definition: armddk.h:52
unsigned int ULONG
Definition: retypes.h:1
static void EnumConnectionsImpl_Destroy(EnumConnectionsImpl *Obj)
Definition: connpt.c:367

◆ EnumConnectionsImpl_Reset()

static HRESULT WINAPI EnumConnectionsImpl_Reset ( IEnumConnections iface)
static

Definition at line 518 of file connpt.c.

519 {
521  TRACE("(%p)\n", This);
522 
523  This->nCur = 0;
524 
525  return S_OK;
526 }
IUnknown * iface
#define TRACE(s)
Definition: solgame.cpp:4
static EnumConnectionsImpl * impl_from_IEnumConnections(IEnumConnections *iface)
Definition: connpt.c:99
#define S_OK
Definition: intsafe.h:59

◆ EnumConnectionsImpl_Skip()

static HRESULT WINAPI EnumConnectionsImpl_Skip ( IEnumConnections iface,
ULONG  cSkip 
)
static

Definition at line 499 of file connpt.c.

501 {
503  TRACE("(%p)->(%d)\n", This, cSkip);
504 
505  if(This->nCur + cSkip >= This->nConns)
506  return S_FALSE;
507 
508  This->nCur += cSkip;
509 
510  return S_OK;
511 }
IUnknown * iface
#define S_FALSE
Definition: winerror.h:2357
#define TRACE(s)
Definition: solgame.cpp:4
static EnumConnectionsImpl * impl_from_IEnumConnections(IEnumConnections *iface)
Definition: connpt.c:99
#define S_OK
Definition: intsafe.h:59

◆ impl_from_IConnectionPoint()

static ConnectionPointImpl* impl_from_IConnectionPoint ( IConnectionPoint iface)
inlinestatic

Definition at line 94 of file connpt.c.

95 {
96  return CONTAINING_RECORD(iface, ConnectionPointImpl, IConnectionPoint_iface);
97 }
IUnknown * iface
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 ConnectionPointImpl_AddRef(), ConnectionPointImpl_Advise(), ConnectionPointImpl_EnumConnections(), ConnectionPointImpl_GetConnectionInterface(), ConnectionPointImpl_GetConnectionPointContainer(), ConnectionPointImpl_QueryInterface(), ConnectionPointImpl_Release(), and ConnectionPointImpl_Unadvise().

◆ impl_from_IEnumConnections()

static EnumConnectionsImpl* impl_from_IEnumConnections ( IEnumConnections iface)
inlinestatic

Definition at line 99 of file connpt.c.

100 {
101  return CONTAINING_RECORD(iface, EnumConnectionsImpl, IEnumConnections_iface);
102 }
IUnknown * iface
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 EnumConnectionsImpl_AddRef(), EnumConnectionsImpl_Clone(), EnumConnectionsImpl_Next(), EnumConnectionsImpl_Release(), EnumConnectionsImpl_Reset(), and EnumConnectionsImpl_Skip().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( ole  )

Variable Documentation

◆ ConnectionPointImpl_VTable

const IConnectionPointVtbl ConnectionPointImpl_VTable
static
Initial value:
=
{
}
static HRESULT WINAPI ConnectionPointImpl_Unadvise(IConnectionPoint *iface, DWORD dwCookie)
Definition: connpt.c:265
static HRESULT WINAPI ConnectionPointImpl_GetConnectionPointContainer(IConnectionPoint *iface, IConnectionPointContainer **ppCPC)
Definition: connpt.c:218
static HRESULT WINAPI ConnectionPointImpl_GetConnectionInterface(IConnectionPoint *iface, IID *piid)
Definition: connpt.c:204
static ULONG WINAPI ConnectionPointImpl_Release(IConnectionPoint *iface)
Definition: connpt.c:184
static HRESULT WINAPI ConnectionPointImpl_QueryInterface(IConnectionPoint *iface, REFIID riid, void **ppvObject)
Definition: connpt.c:126
static ULONG WINAPI ConnectionPointImpl_AddRef(IConnectionPoint *iface)
Definition: connpt.c:169
static HRESULT WINAPI ConnectionPointImpl_Advise(IConnectionPoint *iface, IUnknown *lpUnk, DWORD *pdwCookie)
Definition: connpt.c:232
static HRESULT WINAPI ConnectionPointImpl_EnumConnections(IConnectionPoint *iface, LPENUMCONNECTIONS *ppEnum)
Definition: connpt.c:285

Definition at line 325 of file connpt.c.

Referenced by CreateConnectionPoint().

◆ EnumConnectionsImpl_VTable

static const IEnumConnectionsVtbl EnumConnectionsImpl_VTable
static
Initial value:
=
{
}
static ULONG WINAPI EnumConnectionsImpl_AddRef(IEnumConnections *iface)
Definition: connpt.c:426
static HRESULT WINAPI EnumConnectionsImpl_Clone(IEnumConnections *iface, LPENUMCONNECTIONS *ppEnum)
Definition: connpt.c:533
static HRESULT WINAPI EnumConnectionsImpl_Skip(IEnumConnections *iface, ULONG cSkip)
Definition: connpt.c:499
static HRESULT WINAPI EnumConnectionsImpl_Next(IEnumConnections *iface, ULONG cConn, LPCONNECTDATA pCD, ULONG *pEnum)
Definition: connpt.c:463
static HRESULT WINAPI EnumConnectionsImpl_Reset(IEnumConnections *iface)
Definition: connpt.c:518
static ULONG WINAPI EnumConnectionsImpl_Release(IEnumConnections *iface)
Definition: connpt.c:442
static HRESULT WINAPI EnumConnectionsImpl_QueryInterface(IEnumConnections *iface, REFIID riid, void **ppvObject)
Definition: connpt.c:384

Definition at line 338 of file connpt.c.

Referenced by EnumConnectionsImpl_Construct().