blob: cc4427d6641b357672f4bb130152db8632a8640a [file] [log] [blame]
/*
* OLE2 COM objects
*
* Copyright 1998 Eric Kohl
*/
#include "ole.h"
#include "ole2.h"
#include "winerror.h"
#include "windows.h"
#include "wine/obj_base.h"
#include "wine/obj_storage.h"
#include "wine/obj_moniker.h"
#include "wine/obj_dataobject.h"
#include "oleobj.h"
#include "debug.h"
#define IsEqualGUID(rguid1, rguid2) (!memcmp(rguid1, rguid2, sizeof(GUID)))
#define IsEqualIID(riid1, riid2) IsEqualGUID(riid1, riid2)
#define IsEqualCLSID(rclsid1, rclsid2) IsEqualGUID(rclsid1, rclsid2)
/**************************************************************************
* IOleAdviseHolder Implementation
*/
static HRESULT WINAPI IOleAdviseHolder_QueryInterface(LPOLEADVISEHOLDER,REFIID,LPVOID*);
static ULONG WINAPI IOleAdviseHolder_AddRef(LPOLEADVISEHOLDER);
static ULONG WINAPI IOleAdviseHolder_Release(LPOLEADVISEHOLDER);
static HRESULT WINAPI IOleAdviseHolder_Advise(LPOLEADVISEHOLDER, IAdviseSink*, DWORD*);
static HRESULT WINAPI IOleAdviseHolder_Unadvise (LPOLEADVISEHOLDER, DWORD);
static HRESULT WINAPI IOleAdviseHolder_EnumAdvise (LPOLEADVISEHOLDER, IEnumSTATDATA **);
static HRESULT WINAPI IOleAdviseHolder_SendOnRename (LPOLEADVISEHOLDER, IMoniker *);
static HRESULT WINAPI IOleAdviseHolder_SendOnSave (LPOLEADVISEHOLDER this);
static HRESULT WINAPI IOleAdviseHolder_SendOnClose (LPOLEADVISEHOLDER this);
/**************************************************************************
* IOleAdviseHolder_VTable
*/
static IOleAdviseHolder_VTable oahvt =
{
IOleAdviseHolder_QueryInterface,
IOleAdviseHolder_AddRef,
IOleAdviseHolder_Release,
IOleAdviseHolder_Advise,
IOleAdviseHolder_Unadvise,
IOleAdviseHolder_EnumAdvise,
IOleAdviseHolder_SendOnRename,
IOleAdviseHolder_SendOnSave,
IOleAdviseHolder_SendOnClose
};
/**************************************************************************
* IOleAdviseHolder_Constructor
*/
LPOLEADVISEHOLDER IOleAdviseHolder_Constructor()
{
LPOLEADVISEHOLDER lpoah;
lpoah= (LPOLEADVISEHOLDER)HeapAlloc(GetProcessHeap(),0,sizeof(IOleAdviseHolder));
lpoah->ref = 1;
lpoah->lpvtbl = &oahvt;
FIXME (ole, "(%p)->()\n", lpoah);
return lpoah;
}
/**************************************************************************
* IOleAdviseHolder_QueryInterface
*/
static HRESULT WINAPI
IOleAdviseHolder_QueryInterface (LPOLEADVISEHOLDER this, REFIID riid, LPVOID *ppvObj)
{
char xriid[50];
WINE_StringFromCLSID((LPCLSID)riid,xriid);
FIXME (ole, "(%p)->(\n\tIID:\t%s)\n", this, xriid);
*ppvObj = NULL;
if(IsEqualIID(riid, &IID_IUnknown)) {
/* IUnknown */
*ppvObj = this;
}
else if(IsEqualIID(riid, &IID_IOleAdviseHolder)) {
/* IOleAdviseHolder */
*ppvObj = (IOleAdviseHolder*) this;
}
if(*ppvObj) {
(*(LPOLEADVISEHOLDER*)ppvObj)->lpvtbl->fnAddRef(this);
FIXME (ole, "-- Interface: (%p)->(%p)\n", ppvObj, *ppvObj);
return S_OK;
}
FIXME (ole, "-- Interface: E_NOINTERFACE\n");
return E_NOINTERFACE;
}
/******************************************************************************
* IOleAdviseHolder_AddRef
*/
static ULONG WINAPI
IOleAdviseHolder_AddRef (LPOLEADVISEHOLDER this)
{
FIXME (ole, "(%p)->(count=%lu)\n", this, this->ref);
return ++(this->ref);
}
/******************************************************************************
* IOleAdviseHolder_Release
*/
static ULONG WINAPI
IOleAdviseHolder_Release (LPOLEADVISEHOLDER this)
{
FIXME (ole, "(%p)->(count=%lu)\n", this, this->ref);
if (!--(this->ref)) {
FIXME (ole, "-- destroying IOleAdviseHolder(%p)\n", this);
HeapFree(GetProcessHeap(),0,this);
return 0;
}
return this->ref;
}
/******************************************************************************
* IOleAdviseHolder_Advise
*/
static HRESULT WINAPI
IOleAdviseHolder_Advise (LPOLEADVISEHOLDER this,
IAdviseSink *pAdvise, DWORD *pdwConnection)
{
FIXME (ole, "(%p)->(%p %p)\n", this, pAdvise, pdwConnection);
*pdwConnection = 0;
return S_OK;
}
/******************************************************************************
* IOleAdviseHolder_Unadvise
*/
static HRESULT WINAPI
IOleAdviseHolder_Unadvise (LPOLEADVISEHOLDER this, DWORD dwConnection)
{
FIXME (ole, "(%p)->(%lu)\n", this, dwConnection);
return S_OK;
}
/******************************************************************************
* IOleAdviseHolder_EnumAdvise
*/
static HRESULT WINAPI
IOleAdviseHolder_EnumAdvise (LPOLEADVISEHOLDER this, IEnumSTATDATA **ppenumAdvise)
{
FIXME (ole, "(%p)->(%p)\n", this, ppenumAdvise);
*ppenumAdvise = NULL;
return S_OK;
}
/******************************************************************************
* IOleAdviseHolder_SendOnRename
*/
static HRESULT WINAPI
IOleAdviseHolder_SendOnRename (LPOLEADVISEHOLDER this, IMoniker *pmk)
{
FIXME (ole, "(%p)->(%p)\n", this, pmk);
return S_OK;
}
/******************************************************************************
* IOleAdviseHolder_SendOnSave
*/
static HRESULT WINAPI
IOleAdviseHolder_SendOnSave (LPOLEADVISEHOLDER this)
{
FIXME (ole, "(%p)\n", this);
return S_OK;
}
/******************************************************************************
* IOleAdviseHolder_SendOnClose
*/
static HRESULT WINAPI
IOleAdviseHolder_SendOnClose (LPOLEADVISEHOLDER this)
{
FIXME (ole, "(%p)\n", this);
return S_OK;
}
/***********************************************************************
* API functions
*/
/***********************************************************************
* CreateOleAdviseHolder [OLE32.59]
*/
HRESULT WINAPI CreateOleAdviseHolder32 (LPOLEADVISEHOLDER *ppOAHolder)
{
FIXME(ole,"(%p): stub!\n", ppOAHolder);
*ppOAHolder = IOleAdviseHolder_Constructor ();
if (*ppOAHolder)
return S_OK;
*ppOAHolder = 0;
return E_OUTOFMEMORY;
}