Sync to Wine-20050830:

Francois Gouget <fgouget@free.fr>
- Use LPSTORAGE to better match the PSDK.
  Document the real SEGPTR type using the standard documentation
  mechanisms. Fixes winapi_check warnings.
Robert Shearman <rob@codeweavers.com>
- Remove unused thread handle entry from the apartment structure.
- Implement IMarshal on proxies so that we don't end up with proxies
  to proxies, causing potential deadlock issues and performance
  problems.
- Add a test for this situation and remove the todo_wine from another
  test that now succeeds.
- Add stub for CoAllowSetForegroundWindow.
Vincent Beron <vberon@mecano.gme.usherb.ca>
- Remove local declarations already in included public headers.
- Correct mismatches between spec files and comments about export
  number.
Alexandre Julliard <julliard@winehq.org>
- Uncomment the typedef in the DECLARE_INTERFACE macro, and get rid of
  duplicate typedefs.
- Use the proper WOW functions everywhere instead of the K32WOW variant.
- Don't prefix the functions DllCanUnloadNow, DllGetClassObject and
  Dll(Un)RegisterServer with the dll name so that the compiler can check
  the prototypes.
- Remove duplicate definition of FILE_BEGIN.
- Replace the _ICOM_THIS_From macros by inline functions the way it's
  already done in shelllink.c.
Mike McCormack <mike@codeweavers.com>
- Warning fixes for gcc 4.0.
- Fix some gcc 4.0 warnings.
- return a precomputed result for a NULL string
- pass strlen an LPSTR to eliminate a sign warning
Marcus Meissner <marcus@jet.franken.de>
- Implemented ILockBytes16 (memorystream) support for the 16bit compound
  storage implementation.
- Added ReadClassStg, OleDoAutoConvert, GetConvertStg
  implementations/stubs.
Marcus Meissner <meissner@suse.de>
- Added CoCreateInstance16, CoGetClassObject16, OleLoad16 stubs.

svn path=/trunk/; revision=17678
This commit is contained in:
Gé van Geldorp 2005-09-05 21:56:14 +00:00
parent c9c505d02f
commit 05aeafcb9c
25 changed files with 939 additions and 472 deletions

View file

@ -53,6 +53,11 @@ typedef struct AntiMonikerImpl{
} AntiMonikerImpl;
static inline IMoniker *impl_from_IROTData( IROTData *iface )
{
return (IMoniker *)((char*)iface - FIELD_OFFSET(AntiMonikerImpl, lpvtbl2));
}
/*******************************************************************************
* AntiMoniker_QueryInterface
@ -485,7 +490,7 @@ AntiMonikerImpl_IsSystemMoniker(IMoniker* iface,DWORD* pwdMksys)
static HRESULT WINAPI
AntiMonikerROTDataImpl_QueryInterface(IROTData *iface,REFIID riid,VOID** ppvObject)
{
ICOM_THIS_From_IROTData(IMoniker, iface);
IMoniker *This = impl_from_IROTData(iface);
TRACE("(%p,%p,%p)\n",iface,riid,ppvObject);
@ -497,7 +502,7 @@ AntiMonikerROTDataImpl_QueryInterface(IROTData *iface,REFIID riid,VOID** ppvObje
*/
static ULONG WINAPI AntiMonikerROTDataImpl_AddRef(IROTData *iface)
{
ICOM_THIS_From_IROTData(IMoniker, iface);
IMoniker *This = impl_from_IROTData(iface);
TRACE("(%p)\n",iface);
@ -509,7 +514,7 @@ static ULONG WINAPI AntiMonikerROTDataImpl_AddRef(IROTData *iface)
*/
static ULONG WINAPI AntiMonikerROTDataImpl_Release(IROTData* iface)
{
ICOM_THIS_From_IROTData(IMoniker, iface);
IMoniker *This = impl_from_IROTData(iface);
TRACE("(%p)\n",iface);

View file

@ -224,9 +224,6 @@ static APARTMENT *apartment_construct(DWORD model)
apt = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*apt));
apt->tid = GetCurrentThreadId();
DuplicateHandle(GetCurrentProcess(), GetCurrentThread(),
GetCurrentProcess(), &apt->thread,
THREAD_ALL_ACCESS, FALSE, 0);
list_init(&apt->proxies);
list_init(&apt->stubmgrs);
@ -360,7 +357,6 @@ DWORD apartment_release(struct apartment *apt)
DEBUG_CLEAR_CRITSEC_NAME(&apt->cs);
DeleteCriticalSection(&apt->cs);
CloseHandle(apt->thread);
HeapFree(GetProcessHeap(), 0, apt);
}
@ -813,27 +809,29 @@ HRESULT WINAPI CoCreateGuid(GUID *pguid)
*/
HRESULT WINAPI __CLSIDFromStringA(LPCSTR idstr, CLSID *id)
{
const BYTE *s = (const BYTE *) idstr;
const BYTE *s;
int i;
BYTE table[256];
if (!s)
s = "{00000000-0000-0000-0000-000000000000}";
else { /* validate the CLSID string */
if (!idstr) {
memset( id, 0, sizeof (CLSID) );
return S_OK;
}
if (strlen(s) != 38)
return CO_E_CLASSSTRING;
/* validate the CLSID string */
if (strlen(idstr) != 38)
return CO_E_CLASSSTRING;
if ((s[0]!='{') || (s[9]!='-') || (s[14]!='-') || (s[19]!='-') || (s[24]!='-') || (s[37]!='}'))
return CO_E_CLASSSTRING;
s = (const BYTE *) idstr;
if ((s[0]!='{') || (s[9]!='-') || (s[14]!='-') || (s[19]!='-') || (s[24]!='-') || (s[37]!='}'))
return CO_E_CLASSSTRING;
for (i=1; i<37; i++) {
if ((i == 9)||(i == 14)||(i == 19)||(i == 24)) continue;
if (!(((s[i] >= '0') && (s[i] <= '9')) ||
((s[i] >= 'a') && (s[i] <= 'f')) ||
((s[i] >= 'A') && (s[i] <= 'F'))))
return CO_E_CLASSSTRING;
}
for (i=1; i<37; i++) {
if ((i == 9)||(i == 14)||(i == 19)||(i == 24)) continue;
if (!(((s[i] >= '0') && (s[i] <= '9')) ||
((s[i] >= 'a') && (s[i] <= 'f')) ||
((s[i] >= 'A') && (s[i] <= 'F'))))
return CO_E_CLASSSTRING;
}
TRACE("%s -> %p\n", s, id);
@ -1026,7 +1024,7 @@ HRESULT WINAPI ProgIDFromCLSID(REFCLSID clsid, LPOLESTR *lplpszProgID)
if (ret == S_OK)
{
DWORD progidlen = 0;
LONG progidlen = 0;
if (RegQueryValueW(hkey, NULL, NULL, &progidlen))
ret = REGDB_E_CLASSNOTREG;
@ -1064,7 +1062,7 @@ HRESULT WINAPI ProgIDFromCLSID(REFCLSID clsid, LPOLESTR *lplpszProgID)
HRESULT WINAPI CLSIDFromProgID16(LPCOLESTR16 progid, LPCLSID riid)
{
char *buf,buf2[80];
DWORD buf2len;
LONG buf2len;
HRESULT err;
HKEY xhkey;
@ -1101,7 +1099,7 @@ HRESULT WINAPI CLSIDFromProgID(LPCOLESTR progid, LPCLSID riid)
{
static const WCHAR clsidW[] = { '\\','C','L','S','I','D',0 };
WCHAR buf2[CHARS_IN_GUID];
DWORD buf2len = sizeof(buf2);
LONG buf2len = sizeof(buf2);
HKEY xhkey;
WCHAR *buf = HeapAlloc( GetProcessHeap(),0,(strlenW(progid)+8) * sizeof(WCHAR) );
@ -1166,7 +1164,7 @@ HRESULT WINAPI CoGetPSClsid(REFIID riid, CLSID *pclsid)
static const WCHAR wszPSC[] = {'\\','P','r','o','x','y','S','t','u','b','C','l','s','i','d','3','2',0};
WCHAR path[ARRAYSIZE(wszInterface) - 1 + CHARS_IN_GUID - 1 + ARRAYSIZE(wszPSC)];
WCHAR value[CHARS_IN_GUID];
DWORD len;
LONG len;
HKEY hkey;
TRACE("() riid=%s, pclsid=%p\n", debugstr_guid(riid), pclsid);
@ -1562,7 +1560,6 @@ HRESULT COM_RegReadPath(HKEY hkeyroot, const WCHAR *keyname, const WCHAR *valuen
}
/***********************************************************************
* CoGetClassObject [COMPOBJ.7]
* CoGetClassObject [OLE32.@]
*
* FIXME. If request allows of several options and there is a failure
@ -1664,6 +1661,23 @@ HRESULT WINAPI CoGetClassObject(
return hres;
}
/***********************************************************************
* CoGetClassObject [COMPOBJ.7]
*
*/
HRESULT WINAPI CoGetClassObject16(
REFCLSID rclsid, DWORD dwClsContext, COSERVERINFO *pServerInfo,
REFIID iid, LPVOID *ppv)
{
FIXME(", stub!\n\tCLSID:\t%s,\n\tIID:\t%s\n", debugstr_guid(rclsid), debugstr_guid(iid));
if (pServerInfo) {
FIXME("\tpServerInfo: name=%s\n",debugstr_w(pServerInfo->pwszName));
FIXME("\t\tpAuthInfo=%p\n",pServerInfo->pAuthInfo);
}
return E_NOTIMPL;
}
/***********************************************************************
* CoResumeClassObjects (OLE32.@)
*
@ -1772,8 +1786,8 @@ HRESULT WINAPI GetClassFile(LPCOLESTR filePathName,CLSID *pclsid)
return MK_E_INVALIDEXTENSION;
}
/***********************************************************************
* CoCreateInstance [COMPOBJ.13]
* CoCreateInstance [OLE32.@]
*/
HRESULT WINAPI CoCreateInstance(
@ -1840,6 +1854,23 @@ HRESULT WINAPI CoCreateInstance(
return hres;
}
/***********************************************************************
* CoCreateInstance [COMPOBJ.13]
*/
HRESULT WINAPI CoCreateInstance16(
REFCLSID rclsid,
LPUNKNOWN pUnkOuter,
DWORD dwClsContext,
REFIID iid,
LPVOID *ppv)
{
FIXME("(%s, %p, %lx, %s, %p), stub!\n",
debugstr_guid(rclsid), pUnkOuter, dwClsContext, debugstr_guid(iid),
ppv
);
return E_NOTIMPL;
}
/***********************************************************************
* CoCreateInstanceEx [OLE32.@]
*/
@ -2173,7 +2204,7 @@ HRESULT WINAPI OleGetAutoConvert(REFCLSID clsidOld, LPCLSID pClsidNew)
static const WCHAR wszAutoConvertTo[] = {'A','u','t','o','C','o','n','v','e','r','t','T','o',0};
HKEY hkey = NULL;
WCHAR buf[CHARS_IN_GUID];
DWORD len;
LONG len;
HRESULT res = S_OK;
if (ERROR_SUCCESS != COM_OpenKeyForCLSID(clsidOld, KEY_READ, &hkey))
@ -2459,6 +2490,16 @@ BOOL WINAPI CoIsHandlerConnected(IUnknown *pUnk)
return TRUE;
}
/***********************************************************************
* CoAllowSetForegroundWindow [OLE32.@]
*
*/
HRESULT WINAPI CoAllowSetForegroundWindow(IUnknown *pUnk, void *pvReserved)
{
FIXME("(%p, %p): stub\n", pUnk, pvReserved);
return S_OK;
}
/***********************************************************************
* CoQueryProxyBlanket [OLE32.@]

View file

@ -4,13 +4,13 @@
4 pascal CoGetMalloc(long ptr) CoGetMalloc16
5 pascal CoRegisterClassObject(ptr ptr long long ptr) CoRegisterClassObject16
6 pascal CoRevokeClassObject(long) CoRevokeClassObject16
7 pascal CoGetClassObject(ptr long ptr ptr ptr) CoGetClassObject
7 pascal CoGetClassObject(ptr long ptr ptr ptr) CoGetClassObject16
8 stub COMARSHALINTERFACE
9 stub COUNMARSHALINTERFACE
10 stub COLOADLIBRARY
11 stub COFREELIBRARY
12 stub COFREEALLLIBRARIES
13 pascal CoCreateInstance(ptr ptr long ptr ptr) CoCreateInstance
13 pascal CoCreateInstance(ptr ptr long ptr ptr) CoCreateInstance16
14 stub STRINGFROMIID
15 pascal CoDisconnectObject(ptr long) CoDisconnectObject
16 stub CORELEASEMARSHALDATA

View file

@ -96,8 +96,8 @@ struct ifproxy
struct list entry; /* entry in proxy_manager list (CS parent->cs) */
struct proxy_manager *parent; /* owning proxy_manager (RO) */
LPVOID iface; /* interface pointer (RO) */
STDOBJREF stdobjref; /* marshal data that represents this object (RO) */
IID iid; /* interface ID (RO) */
IPID ipid; /* imported interface ID (RO) */
LPRPCPROXYBUFFER proxy; /* interface proxy (RO) */
DWORD refs; /* imported (public) references (MUTEX parent->remoting_mutex) */
IRpcChannelBuffer *chan; /* channel to object (CS parent->cs) */
@ -107,6 +107,7 @@ struct ifproxy
struct proxy_manager
{
const IMultiQIVtbl *lpVtbl;
const IMarshalVtbl *lpVtblMarshal;
struct apartment *parent; /* owning apartment (RO) */
struct list entry; /* entry in apartment (CS parent->cs) */
OXID oxid; /* object exported ID (RO) */
@ -127,7 +128,6 @@ struct apartment
LONG refs; /* refcount of the apartment (LOCK) */
DWORD model; /* threading model (RO) */
DWORD tid; /* thread id (RO) */
HANDLE thread; /* thread handle (RO) */
OXID oxid; /* object exporter ID (RO) */
LONG ipidc; /* interface pointer ID counter, starts at 1 (LOCK) */
HWND win; /* message window (RO) */

View file

@ -80,6 +80,10 @@ typedef struct EnumMonikerImpl{
} EnumMonikerImpl;
static inline IMoniker *impl_from_IROTData( IROTData *iface )
{
return (IMoniker *)((char*)iface - FIELD_OFFSET(CompositeMonikerImpl, lpvtbl2));
}
static HRESULT EnumMonikerImpl_CreateEnumMoniker(IMoniker** tabMoniker,ULONG tabSize,ULONG currentPos,BOOL leftToRigth,IEnumMoniker ** ppmk);
@ -1208,7 +1212,7 @@ CompositeMonikerROTDataImpl_QueryInterface(IROTData *iface,REFIID riid,
VOID** ppvObject)
{
ICOM_THIS_From_IROTData(IMoniker, iface);
IMoniker *This = impl_from_IROTData(iface);
TRACE("(%p,%p,%p)\n",iface,riid,ppvObject);
@ -1221,7 +1225,7 @@ CompositeMonikerROTDataImpl_QueryInterface(IROTData *iface,REFIID riid,
static ULONG WINAPI
CompositeMonikerROTDataImpl_AddRef(IROTData *iface)
{
ICOM_THIS_From_IROTData(IMoniker, iface);
IMoniker *This = impl_from_IROTData(iface);
TRACE("(%p)\n",iface);
@ -1233,7 +1237,7 @@ CompositeMonikerROTDataImpl_AddRef(IROTData *iface)
*/
static ULONG WINAPI CompositeMonikerROTDataImpl_Release(IROTData* iface)
{
ICOM_THIS_From_IROTData(IMoniker, iface);
IMoniker *This = impl_from_IROTData(iface);
TRACE("(%p)\n",iface);

View file

@ -93,12 +93,12 @@ struct DataCache
/*
* List all interface VTables here
*/
const IDataObjectVtbl* lpvtbl1;
const IUnknownVtbl* lpvtbl2;
const IPersistStorageVtbl* lpvtbl3;
const IViewObject2Vtbl* lpvtbl4;
const IOleCache2Vtbl* lpvtbl5;
const IOleCacheControlVtbl* lpvtbl6;
const IDataObjectVtbl* lpVtbl;
const IUnknownVtbl* lpvtblNDIUnknown;
const IPersistStorageVtbl* lpvtblIPersistStorage;
const IViewObject2Vtbl* lpvtblIViewObject;
const IOleCache2Vtbl* lpvtblIOleCache2;
const IOleCacheControlVtbl* lpvtblIOleCacheControl;
/*
* Reference count of this object
@ -136,12 +136,37 @@ typedef struct DataCache DataCache;
* There is a version to accommodate all of the VTables implemented
* by this object.
*/
#define _ICOM_THIS_From_IDataObject(class,name) class* this = (class*)name
#define _ICOM_THIS_From_NDIUnknown(class, name) class* this = (class*)(((char*)name)-sizeof(void*))
#define _ICOM_THIS_From_IPersistStorage(class, name) class* this = (class*)(((char*)name)-2*sizeof(void*))
#define _ICOM_THIS_From_IViewObject2(class, name) class* this = (class*)(((char*)name)-3*sizeof(void*))
#define _ICOM_THIS_From_IOleCache2(class, name) class* this = (class*)(((char*)name)-4*sizeof(void*))
#define _ICOM_THIS_From_IOleCacheControl(class, name) class* this = (class*)(((char*)name)-5*sizeof(void*))
static inline DataCache *impl_from_IDataObject( IDataObject *iface )
{
return (DataCache *)((char*)iface - FIELD_OFFSET(DataCache, lpVtbl));
}
static inline DataCache *impl_from_NDIUnknown( IUnknown *iface )
{
return (DataCache *)((char*)iface - FIELD_OFFSET(DataCache, lpvtblNDIUnknown));
}
static inline DataCache *impl_from_IPersistStorage( IPersistStorage *iface )
{
return (DataCache *)((char*)iface - FIELD_OFFSET(DataCache, lpvtblIPersistStorage));
}
static inline DataCache *impl_from_IViewObject2( IViewObject2 *iface )
{
return (DataCache *)((char*)iface - FIELD_OFFSET(DataCache, lpvtblIViewObject));
}
static inline DataCache *impl_from_IOleCache2( IOleCache2 *iface )
{
return (DataCache *)((char*)iface - FIELD_OFFSET(DataCache, lpvtblIOleCache2));
}
static inline DataCache *impl_from_IOleCacheControl( IOleCacheControl *iface )
{
return (DataCache *)((char*)iface - FIELD_OFFSET(DataCache, lpvtblIOleCacheControl));
}
/*
* Prototypes for the methods of the DataCache class.
@ -489,7 +514,7 @@ static HRESULT WINAPI DataCache_NDIUnknown_QueryInterface(
REFIID riid,
void** ppvObject)
{
_ICOM_THIS_From_NDIUnknown(DataCache, iface);
DataCache *this = impl_from_NDIUnknown(iface);
/*
* Perform a sanity check on the parameters.
@ -511,26 +536,26 @@ static HRESULT WINAPI DataCache_NDIUnknown_QueryInterface(
}
else if (memcmp(&IID_IDataObject, riid, sizeof(IID_IDataObject)) == 0)
{
*ppvObject = (IDataObject*)&(this->lpvtbl1);
*ppvObject = (IDataObject*)&(this->lpVtbl);
}
else if ( (memcmp(&IID_IPersistStorage, riid, sizeof(IID_IPersistStorage)) == 0) ||
(memcmp(&IID_IPersist, riid, sizeof(IID_IPersist)) == 0) )
{
*ppvObject = (IPersistStorage*)&(this->lpvtbl3);
*ppvObject = (IPersistStorage*)&(this->lpvtblIPersistStorage);
}
else if ( (memcmp(&IID_IViewObject, riid, sizeof(IID_IViewObject)) == 0) ||
(memcmp(&IID_IViewObject2, riid, sizeof(IID_IViewObject2)) == 0) )
{
*ppvObject = (IViewObject2*)&(this->lpvtbl4);
*ppvObject = (IViewObject2*)&(this->lpvtblIViewObject);
}
else if ( (memcmp(&IID_IOleCache, riid, sizeof(IID_IOleCache)) == 0) ||
(memcmp(&IID_IOleCache2, riid, sizeof(IID_IOleCache2)) == 0) )
{
*ppvObject = (IOleCache2*)&(this->lpvtbl5);
*ppvObject = (IOleCache2*)&(this->lpvtblIOleCache2);
}
else if (memcmp(&IID_IOleCacheControl, riid, sizeof(IID_IOleCacheControl)) == 0)
{
*ppvObject = (IOleCacheControl*)&(this->lpvtbl6);
*ppvObject = (IOleCacheControl*)&(this->lpvtblIOleCacheControl);
}
/*
@ -562,7 +587,7 @@ static HRESULT WINAPI DataCache_NDIUnknown_QueryInterface(
static ULONG WINAPI DataCache_NDIUnknown_AddRef(
IUnknown* iface)
{
_ICOM_THIS_From_NDIUnknown(DataCache, iface);
DataCache *this = impl_from_NDIUnknown(iface);
return InterlockedIncrement(&this->ref);
}
@ -577,7 +602,7 @@ static ULONG WINAPI DataCache_NDIUnknown_AddRef(
static ULONG WINAPI DataCache_NDIUnknown_Release(
IUnknown* iface)
{
_ICOM_THIS_From_NDIUnknown(DataCache, iface);
DataCache *this = impl_from_NDIUnknown(iface);
ULONG ref;
/*
@ -608,7 +633,7 @@ static HRESULT WINAPI DataCache_IDataObject_QueryInterface(
REFIID riid,
void** ppvObject)
{
_ICOM_THIS_From_IDataObject(DataCache, iface);
DataCache *this = impl_from_IDataObject(iface);
return IUnknown_QueryInterface(this->outerUnknown, riid, ppvObject);
}
@ -621,7 +646,7 @@ static HRESULT WINAPI DataCache_IDataObject_QueryInterface(
static ULONG WINAPI DataCache_IDataObject_AddRef(
IDataObject* iface)
{
_ICOM_THIS_From_IDataObject(DataCache, iface);
DataCache *this = impl_from_IDataObject(iface);
return IUnknown_AddRef(this->outerUnknown);
}
@ -634,7 +659,7 @@ static ULONG WINAPI DataCache_IDataObject_AddRef(
static ULONG WINAPI DataCache_IDataObject_Release(
IDataObject* iface)
{
_ICOM_THIS_From_IDataObject(DataCache, iface);
DataCache *this = impl_from_IDataObject(iface);
return IUnknown_Release(this->outerUnknown);
}
@ -886,7 +911,7 @@ static HRESULT WINAPI DataCache_IPersistStorage_QueryInterface(
REFIID riid,
void** ppvObject)
{
_ICOM_THIS_From_IPersistStorage(DataCache, iface);
DataCache *this = impl_from_IPersistStorage(iface);
return IUnknown_QueryInterface(this->outerUnknown, riid, ppvObject);
}
@ -899,7 +924,7 @@ static HRESULT WINAPI DataCache_IPersistStorage_QueryInterface(
static ULONG WINAPI DataCache_IPersistStorage_AddRef(
IPersistStorage* iface)
{
_ICOM_THIS_From_IPersistStorage(DataCache, iface);
DataCache *this = impl_from_IPersistStorage(iface);
return IUnknown_AddRef(this->outerUnknown);
}
@ -912,7 +937,7 @@ static ULONG WINAPI DataCache_IPersistStorage_AddRef(
static ULONG WINAPI DataCache_IPersistStorage_Release(
IPersistStorage* iface)
{
_ICOM_THIS_From_IPersistStorage(DataCache, iface);
DataCache *this = impl_from_IPersistStorage(iface);
return IUnknown_Release(this->outerUnknown);
}
@ -979,7 +1004,7 @@ static HRESULT WINAPI DataCache_Load(
IPersistStorage* iface,
IStorage* pStg)
{
_ICOM_THIS_From_IPersistStorage(DataCache, iface);
DataCache *this = impl_from_IPersistStorage(iface);
TRACE("(%p, %p)\n", iface, pStg);
@ -1012,7 +1037,7 @@ static HRESULT WINAPI DataCache_Save(
IStorage* pStg,
BOOL fSameAsLoad)
{
_ICOM_THIS_From_IPersistStorage(DataCache, iface);
DataCache *this = impl_from_IPersistStorage(iface);
TRACE("(%p, %p, %d)\n", iface, pStg, fSameAsLoad);
@ -1072,7 +1097,7 @@ static HRESULT WINAPI DataCache_SaveCompleted(
static HRESULT WINAPI DataCache_HandsOffStorage(
IPersistStorage* iface)
{
_ICOM_THIS_From_IPersistStorage(DataCache, iface);
DataCache *this = impl_from_IPersistStorage(iface);
TRACE("(%p)\n", iface);
@ -1100,7 +1125,7 @@ static HRESULT WINAPI DataCache_IViewObject2_QueryInterface(
REFIID riid,
void** ppvObject)
{
_ICOM_THIS_From_IViewObject2(DataCache, iface);
DataCache *this = impl_from_IViewObject2(iface);
return IUnknown_QueryInterface(this->outerUnknown, riid, ppvObject);
}
@ -1113,7 +1138,7 @@ static HRESULT WINAPI DataCache_IViewObject2_QueryInterface(
static ULONG WINAPI DataCache_IViewObject2_AddRef(
IViewObject2* iface)
{
_ICOM_THIS_From_IViewObject2(DataCache, iface);
DataCache *this = impl_from_IViewObject2(iface);
return IUnknown_AddRef(this->outerUnknown);
}
@ -1126,7 +1151,7 @@ static ULONG WINAPI DataCache_IViewObject2_AddRef(
static ULONG WINAPI DataCache_IViewObject2_Release(
IViewObject2* iface)
{
_ICOM_THIS_From_IViewObject2(DataCache, iface);
DataCache *this = impl_from_IViewObject2(iface);
return IUnknown_Release(this->outerUnknown);
}
@ -1156,7 +1181,7 @@ static HRESULT WINAPI DataCache_Draw(
HMETAFILE presMetafile = 0;
HRESULT hres;
_ICOM_THIS_From_IViewObject2(DataCache, iface);
DataCache *this = impl_from_IViewObject2(iface);
TRACE("(%p, %lx, %ld, %p, %p, %p, %p, %p, %p, %lx)\n",
iface,
@ -1295,7 +1320,7 @@ static HRESULT WINAPI DataCache_SetAdvise(
DWORD advf,
IAdviseSink* pAdvSink)
{
_ICOM_THIS_From_IViewObject2(DataCache, iface);
DataCache *this = impl_from_IViewObject2(iface);
TRACE("(%p, %lx, %lx, %p)\n", iface, aspects, advf, pAdvSink);
@ -1350,7 +1375,7 @@ static HRESULT WINAPI DataCache_GetAdvise(
DWORD* pAdvf,
IAdviseSink** ppAdvSink)
{
_ICOM_THIS_From_IViewObject2(DataCache, iface);
DataCache *this = impl_from_IViewObject2(iface);
TRACE("(%p, %p, %p, %p)\n", iface, pAspects, pAdvf, ppAdvSink);
@ -1390,7 +1415,7 @@ static HRESULT WINAPI DataCache_GetExtent(
PresentationDataHeader presData;
HRESULT hres = E_FAIL;
_ICOM_THIS_From_IViewObject2(DataCache, iface);
DataCache *this = impl_from_IViewObject2(iface);
TRACE("(%p, %lx, %ld, %p, %p)\n",
iface, dwDrawAspect, lindex, ptd, lpsizel);
@ -1459,7 +1484,7 @@ static HRESULT WINAPI DataCache_IOleCache2_QueryInterface(
REFIID riid,
void** ppvObject)
{
_ICOM_THIS_From_IOleCache2(DataCache, iface);
DataCache *this = impl_from_IOleCache2(iface);
return IUnknown_QueryInterface(this->outerUnknown, riid, ppvObject);
}
@ -1472,7 +1497,7 @@ static HRESULT WINAPI DataCache_IOleCache2_QueryInterface(
static ULONG WINAPI DataCache_IOleCache2_AddRef(
IOleCache2* iface)
{
_ICOM_THIS_From_IOleCache2(DataCache, iface);
DataCache *this = impl_from_IOleCache2(iface);
return IUnknown_AddRef(this->outerUnknown);
}
@ -1485,7 +1510,7 @@ static ULONG WINAPI DataCache_IOleCache2_AddRef(
static ULONG WINAPI DataCache_IOleCache2_Release(
IOleCache2* iface)
{
_ICOM_THIS_From_IOleCache2(DataCache, iface);
DataCache *this = impl_from_IOleCache2(iface);
return IUnknown_Release(this->outerUnknown);
}
@ -1568,7 +1593,7 @@ static HRESULT WINAPI DataCache_IOleCacheControl_QueryInterface(
REFIID riid,
void** ppvObject)
{
_ICOM_THIS_From_IOleCacheControl(DataCache, iface);
DataCache *this = impl_from_IOleCacheControl(iface);
return IUnknown_QueryInterface(this->outerUnknown, riid, ppvObject);
}
@ -1581,7 +1606,7 @@ static HRESULT WINAPI DataCache_IOleCacheControl_QueryInterface(
static ULONG WINAPI DataCache_IOleCacheControl_AddRef(
IOleCacheControl* iface)
{
_ICOM_THIS_From_IOleCacheControl(DataCache, iface);
DataCache *this = impl_from_IOleCacheControl(iface);
return IUnknown_AddRef(this->outerUnknown);
}
@ -1594,7 +1619,7 @@ static ULONG WINAPI DataCache_IOleCacheControl_AddRef(
static ULONG WINAPI DataCache_IOleCacheControl_Release(
IOleCacheControl* iface)
{
_ICOM_THIS_From_IOleCacheControl(DataCache, iface);
DataCache *this = impl_from_IOleCacheControl(iface);
return IUnknown_Release(this->outerUnknown);
}
@ -1735,13 +1760,13 @@ HRESULT WINAPI CreateDataCache(
/*
* Make sure it supports the interface required by the caller.
*/
hr = IUnknown_QueryInterface((IUnknown*)&(newCache->lpvtbl2), riid, ppvObj);
hr = IUnknown_QueryInterface((IUnknown*)&(newCache->lpvtblNDIUnknown), riid, ppvObj);
/*
* Release the reference obtained in the constructor. If
* the QueryInterface was unsuccessful, it will free the class.
*/
IUnknown_Release((IUnknown*)&(newCache->lpvtbl2));
IUnknown_Release((IUnknown*)&(newCache->lpvtblNDIUnknown));
return hr;
}
@ -1766,12 +1791,12 @@ static DataCache* DataCache_Construct(
/*
* Initialize the virtual function table.
*/
newObject->lpvtbl1 = &DataCache_IDataObject_VTable;
newObject->lpvtbl2 = &DataCache_NDIUnknown_VTable;
newObject->lpvtbl3 = &DataCache_IPersistStorage_VTable;
newObject->lpvtbl4 = &DataCache_IViewObject2_VTable;
newObject->lpvtbl5 = &DataCache_IOleCache2_VTable;
newObject->lpvtbl6 = &DataCache_IOleCacheControl_VTable;
newObject->lpVtbl = &DataCache_IDataObject_VTable;
newObject->lpvtblNDIUnknown = &DataCache_NDIUnknown_VTable;
newObject->lpvtblIPersistStorage = &DataCache_IPersistStorage_VTable;
newObject->lpvtblIViewObject = &DataCache_IViewObject2_VTable;
newObject->lpvtblIOleCache2 = &DataCache_IOleCache2_VTable;
newObject->lpvtblIOleCacheControl = &DataCache_IOleCacheControl_VTable;
/*
* Start with one reference count. The caller of this function
@ -1786,7 +1811,7 @@ static DataCache* DataCache_Construct(
* lifetime.
*/
if (pUnkOuter==NULL)
pUnkOuter = (IUnknown*)&(newObject->lpvtbl2);
pUnkOuter = (IUnknown*)&(newObject->lpvtblNDIUnknown);
newObject->outerUnknown = pUnkOuter;

View file

@ -70,10 +70,10 @@ struct DefaultHandler
/*
* List all interface VTables here
*/
const IOleObjectVtbl* lpvtbl1;
const IUnknownVtbl* lpvtbl2;
const IDataObjectVtbl* lpvtbl3;
const IRunnableObjectVtbl* lpvtbl4;
const IOleObjectVtbl* lpVtbl;
const IUnknownVtbl* lpvtblIUnknown;
const IDataObjectVtbl* lpvtblIDataObject;
const IRunnableObjectVtbl* lpvtblIRunnableObject;
/*
* Reference count of this object
@ -82,7 +82,7 @@ struct DefaultHandler
/*
* IUnknown implementation of the outer object.
*/
p */
IUnknown* outerUnknown;
/*
@ -123,15 +123,31 @@ struct DefaultHandler
typedef struct DefaultHandler DefaultHandler;
/*
* Here, I define utility macros to help with the casting of the
* Here, I define utility functions to help with the casting of the
* "this" parameter.
* There is a version to accommodate all of the VTables implemented
* by this object.
*/
#define _ICOM_THIS_From_IOleObject(class,name) class* this = (class*)name
#define _ICOM_THIS_From_NDIUnknown(class, name) class* this = (class*)(((char*)name)-sizeof(void*))
#define _ICOM_THIS_From_IDataObject(class, name) class* this = (class*)(((char*)name)-2*sizeof(void*))
#define _ICOM_THIS_From_IRunnableObject(class, name) class* this = (class*)(((char*)name)-3*sizeof(void*))
static inline DefaultHandler *impl_from_IOleObject( IOleObject *iface )
{
return (DefaultHandler *)((char*)iface - FIELD_OFFSET(DefaultHandler, lpVtbl));
}
static inline DefaultHandler *impl_from_NDIUnknown( IUnknown *iface )
{
return (DefaultHandler *)((char*)iface - FIELD_OFFSET(DefaultHandler, lpvtblIUnknown));
}
static inline DefaultHandler *impl_from_IDataObject( IDataObject *iface )
{
return (DefaultHandler *)((char*)iface - FIELD_OFFSET(DefaultHandler, lpvtblIDataObject));
}
static inline DefaultHandler *impl_from_IRunnableObject( IRunnableObject *iface )
{
return (DefaultHandler *)((char*)iface - FIELD_OFFSET(DefaultHandler, lpvtblIRunnableObject));
}
/*
* Prototypes for the methods of the DefaultHandler class.
@ -432,13 +448,13 @@ HRESULT WINAPI OleCreateDefaultHandler(
/*
* Make sure it supports the interface required by the caller.
*/
hr = IUnknown_QueryInterface((IUnknown*)&(newHandler->lpvtbl2), riid, ppvObj);
hr = IUnknown_QueryInterface((IUnknown*)&(newHandler->lpvtblIUnknown), riid, ppvObj);
/*
* Release the reference obtained in the constructor. If
* the QueryInterface was unsuccessful, it will free the class.
*/
IUnknown_Release((IUnknown*)&(newHandler->lpvtbl2));
IUnknown_Release((IUnknown*)&(newHandler->lpvtblIUnknown));
return hr;
}
@ -463,10 +479,10 @@ static DefaultHandler* DefaultHandler_Construct(
/*
* Initialize the virtual function table.
*/
newObject->lpvtbl1 = &DefaultHandler_IOleObject_VTable;
newObject->lpvtbl2 = &DefaultHandler_NDIUnknown_VTable;
newObject->lpvtbl3 = &DefaultHandler_IDataObject_VTable;
newObject->lpvtbl4 = &DefaultHandler_IRunnableObject_VTable;
newObject->lpVtbl = &DefaultHandler_IOleObject_VTable;
newObject->lpvtblIUnknown = &DefaultHandler_NDIUnknown_VTable;
newObject->lpvtblIDataObject = &DefaultHandler_IDataObject_VTable;
newObject->lpvtblIRunnableObject = &DefaultHandler_IRunnableObject_VTable;
/*
* Start with one reference count. The caller of this function
@ -481,7 +497,7 @@ static DefaultHandler* DefaultHandler_Construct(
* lifetime.
*/
if (pUnkOuter==NULL)
pUnkOuter = (IUnknown*)&(newObject->lpvtbl2);
pUnkOuter = (IUnknown*)&(newObject->lpvtblIUnknown);
newObject->outerUnknown = pUnkOuter;
@ -580,7 +596,7 @@ static HRESULT WINAPI DefaultHandler_NDIUnknown_QueryInterface(
REFIID riid,
void** ppvObject)
{
_ICOM_THIS_From_NDIUnknown(DefaultHandler, iface);
DefaultHandler *this = impl_from_NDIUnknown(iface);
/*
* Perform a sanity check on the parameters.
@ -602,15 +618,15 @@ static HRESULT WINAPI DefaultHandler_NDIUnknown_QueryInterface(
}
else if (memcmp(&IID_IOleObject, riid, sizeof(IID_IOleObject)) == 0)
{
*ppvObject = (IOleObject*)&(this->lpvtbl1);
*ppvObject = (IOleObject*)&(this->lpVtbl);
}
else if (memcmp(&IID_IDataObject, riid, sizeof(IID_IDataObject)) == 0)
{
*ppvObject = (IDataObject*)&(this->lpvtbl3);
*ppvObject = (IDataObject*)&(this->lpvtblIDataObject);
}
else if (memcmp(&IID_IRunnableObject, riid, sizeof(IID_IRunnableObject)) == 0)
{
*ppvObject = (IRunnableObject*)&(this->lpvtbl4);
*ppvObject = (IRunnableObject*)&(this->lpvtblIRunnableObject);
}
else
{
@ -650,7 +666,7 @@ static HRESULT WINAPI DefaultHandler_NDIUnknown_QueryInterface(
static ULONG WINAPI DefaultHandler_NDIUnknown_AddRef(
IUnknown* iface)
{
_ICOM_THIS_From_NDIUnknown(DefaultHandler, iface);
DefaultHandler *this = impl_from_NDIUnknown(iface);
return InterlockedIncrement(&this->ref);
}
@ -665,7 +681,7 @@ static ULONG WINAPI DefaultHandler_NDIUnknown_AddRef(
static ULONG WINAPI DefaultHandler_NDIUnknown_Release(
IUnknown* iface)
{
_ICOM_THIS_From_NDIUnknown(DefaultHandler, iface);
DefaultHandler *this = impl_from_NDIUnknown(iface);
ULONG ref;
/*
@ -696,7 +712,7 @@ static HRESULT WINAPI DefaultHandler_QueryInterface(
REFIID riid,
void** ppvObject)
{
_ICOM_THIS_From_IOleObject(DefaultHandler, iface);
DefaultHandler *this = impl_from_IOleObject(iface);
return IUnknown_QueryInterface(this->outerUnknown, riid, ppvObject);
}
@ -709,7 +725,7 @@ static HRESULT WINAPI DefaultHandler_QueryInterface(
static ULONG WINAPI DefaultHandler_AddRef(
IOleObject* iface)
{
_ICOM_THIS_From_IOleObject(DefaultHandler, iface);
DefaultHandler *this = impl_from_IOleObject(iface);
return IUnknown_AddRef(this->outerUnknown);
}
@ -722,7 +738,7 @@ static ULONG WINAPI DefaultHandler_AddRef(
static ULONG WINAPI DefaultHandler_Release(
IOleObject* iface)
{
_ICOM_THIS_From_IOleObject(DefaultHandler, iface);
DefaultHandler *this = impl_from_IOleObject(iface);
return IUnknown_Release(this->outerUnknown);
}
@ -739,7 +755,7 @@ static HRESULT WINAPI DefaultHandler_SetClientSite(
IOleObject* iface,
IOleClientSite* pClientSite)
{
_ICOM_THIS_From_IOleObject(DefaultHandler, iface);
DefaultHandler *this = impl_from_IOleObject(iface);
TRACE("(%p, %p)\n", iface, pClientSite);
@ -774,7 +790,7 @@ static HRESULT WINAPI DefaultHandler_GetClientSite(
IOleObject* iface,
IOleClientSite** ppClientSite)
{
_ICOM_THIS_From_IOleObject(DefaultHandler, iface);
DefaultHandler *this = impl_from_IOleObject(iface);
/*
* Sanity check.
@ -805,7 +821,7 @@ static HRESULT WINAPI DefaultHandler_SetHostNames(
LPCOLESTR szContainerApp,
LPCOLESTR szContainerObj)
{
_ICOM_THIS_From_IOleObject(DefaultHandler, iface);
DefaultHandler *this = impl_from_IOleObject(iface);
TRACE("(%p, %s, %s)\n",
iface,
@ -888,7 +904,7 @@ static HRESULT WINAPI DefaultHandler_GetMoniker(
DWORD dwWhichMoniker,
IMoniker** ppmk)
{
_ICOM_THIS_From_IOleObject(DefaultHandler, iface);
DefaultHandler *this = impl_from_IOleObject(iface);
TRACE("(%p, %ld, %ld, %p)\n",
iface, dwAssign, dwWhichMoniker, ppmk);
@ -967,7 +983,7 @@ static HRESULT WINAPI DefaultHandler_EnumVerbs(
IOleObject* iface,
IEnumOLEVERB** ppEnumOleVerb)
{
_ICOM_THIS_From_IOleObject(DefaultHandler, iface);
DefaultHandler *this = impl_from_IOleObject(iface);
TRACE("(%p, %p)\n", iface, ppEnumOleVerb);
@ -1007,7 +1023,7 @@ static HRESULT WINAPI DefaultHandler_GetUserClassID(
IOleObject* iface,
CLSID* pClsid)
{
_ICOM_THIS_From_IOleObject(DefaultHandler, iface);
DefaultHandler *this = impl_from_IOleObject(iface);
TRACE("(%p, %p)\n", iface, pClsid);
@ -1035,7 +1051,7 @@ static HRESULT WINAPI DefaultHandler_GetUserType(
DWORD dwFormOfType,
LPOLESTR* pszUserType)
{
_ICOM_THIS_From_IOleObject(DefaultHandler, iface);
DefaultHandler *this = impl_from_IOleObject(iface);
TRACE("(%p, %ld, %p)\n", iface, dwFormOfType, pszUserType);
@ -1076,7 +1092,7 @@ static HRESULT WINAPI DefaultHandler_GetExtent(
IViewObject2* cacheView = NULL;
HRESULT hres;
_ICOM_THIS_From_IOleObject(DefaultHandler, iface);
DefaultHandler *this = impl_from_IOleObject(iface);
TRACE("(%p, %lx, %p)\n", iface, dwDrawAspect, psizel);
@ -1123,7 +1139,7 @@ static HRESULT WINAPI DefaultHandler_Advise(
DWORD* pdwConnection)
{
HRESULT hres = S_OK;
_ICOM_THIS_From_IOleObject(DefaultHandler, iface);
DefaultHandler *this = impl_from_IOleObject(iface);
TRACE("(%p, %p, %p)\n", iface, pAdvSink, pdwConnection);
@ -1157,7 +1173,7 @@ static HRESULT WINAPI DefaultHandler_Unadvise(
IOleObject* iface,
DWORD dwConnection)
{
_ICOM_THIS_From_IOleObject(DefaultHandler, iface);
DefaultHandler *this = impl_from_IOleObject(iface);
TRACE("(%p, %ld)\n", iface, dwConnection);
@ -1184,7 +1200,7 @@ static HRESULT WINAPI DefaultHandler_EnumAdvise(
IOleObject* iface,
IEnumSTATDATA** ppenumAdvise)
{
_ICOM_THIS_From_IOleObject(DefaultHandler, iface);
DefaultHandler *this = impl_from_IOleObject(iface);
TRACE("(%p, %p)\n", iface, ppenumAdvise);
@ -1220,7 +1236,7 @@ static HRESULT WINAPI DefaultHandler_GetMiscStatus(
DWORD* pdwStatus)
{
HRESULT hres;
_ICOM_THIS_From_IOleObject(DefaultHandler, iface);
DefaultHandler *this = impl_from_IOleObject(iface);
TRACE("(%p, %lx, %p)\n", iface, dwAspect, pdwStatus);
@ -1262,7 +1278,7 @@ static HRESULT WINAPI DefaultHandler_IDataObject_QueryInterface(
REFIID riid,
void** ppvObject)
{
_ICOM_THIS_From_IDataObject(DefaultHandler, iface);
DefaultHandler *this = impl_from_IDataObject(iface);
return IUnknown_QueryInterface(this->outerUnknown, riid, ppvObject);
}
@ -1275,7 +1291,7 @@ static HRESULT WINAPI DefaultHandler_IDataObject_QueryInterface(
static ULONG WINAPI DefaultHandler_IDataObject_AddRef(
IDataObject* iface)
{
_ICOM_THIS_From_IDataObject(DefaultHandler, iface);
DefaultHandler *this = impl_from_IDataObject(iface);
return IUnknown_AddRef(this->outerUnknown);
}
@ -1288,7 +1304,7 @@ static ULONG WINAPI DefaultHandler_IDataObject_AddRef(
static ULONG WINAPI DefaultHandler_IDataObject_Release(
IDataObject* iface)
{
_ICOM_THIS_From_IDataObject(DefaultHandler, iface);
DefaultHandler *this = impl_from_IDataObject(iface);
return IUnknown_Release(this->outerUnknown);
}
@ -1308,7 +1324,7 @@ static HRESULT WINAPI DefaultHandler_GetData(
IDataObject* cacheDataObject = NULL;
HRESULT hres;
_ICOM_THIS_From_IDataObject(DefaultHandler, iface);
DefaultHandler *this = impl_from_IDataObject(iface);
TRACE("(%p, %p, %p)\n", iface, pformatetcIn, pmedium);
@ -1352,7 +1368,7 @@ static HRESULT WINAPI DefaultHandler_QueryGetData(
IDataObject* cacheDataObject = NULL;
HRESULT hres;
_ICOM_THIS_From_IDataObject(DefaultHandler, iface);
DefaultHandler *this = impl_from_IDataObject(iface);
TRACE("(%p, %p)\n", iface, pformatetc);
@ -1405,7 +1421,7 @@ static HRESULT WINAPI DefaultHandler_SetData(
IDataObject* cacheDataObject = NULL;
HRESULT hres;
_ICOM_THIS_From_IDataObject(DefaultHandler, iface);
DefaultHandler *this = impl_from_IDataObject(iface);
TRACE("(%p, %p, %p, %d)\n", iface, pformatetc, pmedium, fRelease);
@ -1440,7 +1456,7 @@ static HRESULT WINAPI DefaultHandler_EnumFormatEtc(
IEnumFORMATETC** ppenumFormatEtc)
{
HRESULT hres;
_ICOM_THIS_From_IDataObject(DefaultHandler, iface);
DefaultHandler *this = impl_from_IDataObject(iface);
TRACE("(%p, %lx, %p)\n", iface, dwDirection, ppenumFormatEtc);
@ -1465,7 +1481,7 @@ static HRESULT WINAPI DefaultHandler_DAdvise(
DWORD* pdwConnection)
{
HRESULT hres = S_OK;
_ICOM_THIS_From_IDataObject(DefaultHandler, iface);
DefaultHandler *this = impl_from_IDataObject(iface);
TRACE("(%p, %p, %ld, %p, %p)\n",
iface, pformatetc, advf, pAdvSink, pdwConnection);
@ -1503,7 +1519,7 @@ static HRESULT WINAPI DefaultHandler_DUnadvise(
IDataObject* iface,
DWORD dwConnection)
{
_ICOM_THIS_From_IDataObject(DefaultHandler, iface);
DefaultHandler *this = impl_from_IDataObject(iface);
TRACE("(%p, %ld)\n", iface, dwConnection);
@ -1532,7 +1548,7 @@ static HRESULT WINAPI DefaultHandler_EnumDAdvise(
IDataObject* iface,
IEnumSTATDATA** ppenumAdvise)
{
_ICOM_THIS_From_IDataObject(DefaultHandler, iface);
DefaultHandler *this = impl_from_IDataObject(iface);
TRACE("(%p, %p)\n", iface, ppenumAdvise);
@ -1574,7 +1590,7 @@ static HRESULT WINAPI DefaultHandler_IRunnableObject_QueryInterface(
REFIID riid,
void** ppvObject)
{
_ICOM_THIS_From_IRunnableObject(DefaultHandler, iface);
DefaultHandler *this = impl_from_IRunnableObject(iface);
return IUnknown_QueryInterface(this->outerUnknown, riid, ppvObject);
}
@ -1587,7 +1603,7 @@ static HRESULT WINAPI DefaultHandler_IRunnableObject_QueryInterface(
static ULONG WINAPI DefaultHandler_IRunnableObject_AddRef(
IRunnableObject* iface)
{
_ICOM_THIS_From_IRunnableObject(DefaultHandler, iface);
DefaultHandler *this = impl_from_IRunnableObject(iface);
return IUnknown_AddRef(this->outerUnknown);
}
@ -1600,7 +1616,7 @@ static ULONG WINAPI DefaultHandler_IRunnableObject_AddRef(
static ULONG WINAPI DefaultHandler_IRunnableObject_Release(
IRunnableObject* iface)
{
_ICOM_THIS_From_IRunnableObject(DefaultHandler, iface);
DefaultHandler *this = impl_from_IRunnableObject(iface);
return IUnknown_Release(this->outerUnknown);
}

View file

@ -147,14 +147,22 @@ static const ISupportErrorInfoVtbl ISupportErrorInfoImpl_VTable;
/*
converts an object pointer to This
*/
#define _IErrorInfo_Offset ((int)(&(((ErrorInfoImpl*)0)->lpvtei)))
#define _ICOM_THIS_From_IErrorInfo(class, name) class* This = (class*)(((char*)name)-_IErrorInfo_Offset)
#define _ICreateErrorInfo_Offset ((int)(&(((ErrorInfoImpl*)0)->lpvtcei)))
#define _ICOM_THIS_From_ICreateErrorInfo(class, name) class* This = (class*)(((char*)name)-_ICreateErrorInfo_Offset)
static inline ErrorInfoImpl *impl_from_IErrorInfo( IErrorInfo *iface )
{
return (ErrorInfoImpl *)((char*)iface - FIELD_OFFSET(ErrorInfoImpl, lpvtei));
}
static inline ErrorInfoImpl *impl_from_ICreateErrorInfo( ICreateErrorInfo *iface )
{
return (ErrorInfoImpl *)((char*)iface - FIELD_OFFSET(ErrorInfoImpl, lpvtcei));
}
static inline ErrorInfoImpl *impl_from_ISupportErrorInfo( ISupportErrorInfo *iface )
{
return (ErrorInfoImpl *)((char*)iface - FIELD_OFFSET(ErrorInfoImpl, lpvtsei));
}
#define _ISupportErrorInfo_Offset ((int)(&(((ErrorInfoImpl*)0)->lpvtsei)))
#define _ICOM_THIS_From_ISupportErrorInfo(class, name) class* This = (class*)(((char*)name)-_ISupportErrorInfo_Offset)
/*
converts This to an object pointer
@ -186,7 +194,7 @@ static HRESULT WINAPI IErrorInfoImpl_QueryInterface(
REFIID riid,
VOID** ppvoid)
{
_ICOM_THIS_From_IErrorInfo(ErrorInfoImpl, iface);
ErrorInfoImpl *This = impl_from_IErrorInfo(iface);
TRACE("(%p)->(\n\tIID:\t%s,%p)\n",This,debugstr_guid(riid),ppvoid);
*ppvoid = NULL;
@ -217,7 +225,7 @@ static HRESULT WINAPI IErrorInfoImpl_QueryInterface(
static ULONG WINAPI IErrorInfoImpl_AddRef(
IErrorInfo* iface)
{
_ICOM_THIS_From_IErrorInfo(ErrorInfoImpl, iface);
ErrorInfoImpl *This = impl_from_IErrorInfo(iface);
TRACE("(%p)->(count=%lu)\n",This,This->ref);
return InterlockedIncrement(&This->ref);
}
@ -225,7 +233,7 @@ static ULONG WINAPI IErrorInfoImpl_AddRef(
static ULONG WINAPI IErrorInfoImpl_Release(
IErrorInfo* iface)
{
_ICOM_THIS_From_IErrorInfo(ErrorInfoImpl, iface);
ErrorInfoImpl *This = impl_from_IErrorInfo(iface);
ULONG ref = InterlockedDecrement(&This->ref);
TRACE("(%p)->(count=%lu)\n",This,ref+1);
@ -243,7 +251,7 @@ static HRESULT WINAPI IErrorInfoImpl_GetGUID(
IErrorInfo* iface,
GUID * pGUID)
{
_ICOM_THIS_From_IErrorInfo(ErrorInfoImpl, iface);
ErrorInfoImpl *This = impl_from_IErrorInfo(iface);
TRACE("(%p)->(count=%lu)\n",This,This->ref);
if(!pGUID )return E_INVALIDARG;
memcpy(pGUID, &This->m_Guid, sizeof(GUID));
@ -254,7 +262,7 @@ static HRESULT WINAPI IErrorInfoImpl_GetSource(
IErrorInfo* iface,
BSTR *pBstrSource)
{
_ICOM_THIS_From_IErrorInfo(ErrorInfoImpl, iface);
ErrorInfoImpl *This = impl_from_IErrorInfo(iface);
TRACE("(%p)->(pBstrSource=%p)\n",This,pBstrSource);
if (pBstrSource == NULL)
return E_INVALIDARG;
@ -266,7 +274,7 @@ static HRESULT WINAPI IErrorInfoImpl_GetDescription(
IErrorInfo* iface,
BSTR *pBstrDescription)
{
_ICOM_THIS_From_IErrorInfo(ErrorInfoImpl, iface);
ErrorInfoImpl *This = impl_from_IErrorInfo(iface);
TRACE("(%p)->(pBstrDescription=%p)\n",This,pBstrDescription);
if (pBstrDescription == NULL)
@ -280,7 +288,7 @@ static HRESULT WINAPI IErrorInfoImpl_GetHelpFile(
IErrorInfo* iface,
BSTR *pBstrHelpFile)
{
_ICOM_THIS_From_IErrorInfo(ErrorInfoImpl, iface);
ErrorInfoImpl *This = impl_from_IErrorInfo(iface);
TRACE("(%p)->(pBstrHelpFile=%p)\n",This, pBstrHelpFile);
if (pBstrHelpFile == NULL)
@ -294,7 +302,7 @@ static HRESULT WINAPI IErrorInfoImpl_GetHelpContext(
IErrorInfo* iface,
DWORD *pdwHelpContext)
{
_ICOM_THIS_From_IErrorInfo(ErrorInfoImpl, iface);
ErrorInfoImpl *This = impl_from_IErrorInfo(iface);
TRACE("(%p)->(pdwHelpContext=%p)\n",This, pdwHelpContext);
if (pdwHelpContext == NULL)
return E_INVALIDARG;
@ -322,7 +330,7 @@ static HRESULT WINAPI ICreateErrorInfoImpl_QueryInterface(
REFIID riid,
VOID** ppvoid)
{
_ICOM_THIS_From_ICreateErrorInfo(ErrorInfoImpl, iface);
ErrorInfoImpl *This = impl_from_ICreateErrorInfo(iface);
TRACE("(%p)\n", This);
return IErrorInfo_QueryInterface(_IErrorInfo_(This), riid, ppvoid);
}
@ -330,7 +338,7 @@ static HRESULT WINAPI ICreateErrorInfoImpl_QueryInterface(
static ULONG WINAPI ICreateErrorInfoImpl_AddRef(
ICreateErrorInfo* iface)
{
_ICOM_THIS_From_ICreateErrorInfo(ErrorInfoImpl, iface);
ErrorInfoImpl *This = impl_from_ICreateErrorInfo(iface);
TRACE("(%p)\n", This);
return IErrorInfo_AddRef(_IErrorInfo_(This));
}
@ -338,7 +346,7 @@ static ULONG WINAPI ICreateErrorInfoImpl_AddRef(
static ULONG WINAPI ICreateErrorInfoImpl_Release(
ICreateErrorInfo* iface)
{
_ICOM_THIS_From_ICreateErrorInfo(ErrorInfoImpl, iface);
ErrorInfoImpl *This = impl_from_ICreateErrorInfo(iface);
TRACE("(%p)\n", This);
return IErrorInfo_Release(_IErrorInfo_(This));
}
@ -348,7 +356,7 @@ static HRESULT WINAPI ICreateErrorInfoImpl_SetGUID(
ICreateErrorInfo* iface,
REFGUID rguid)
{
_ICOM_THIS_From_ICreateErrorInfo(ErrorInfoImpl, iface);
ErrorInfoImpl *This = impl_from_ICreateErrorInfo(iface);
TRACE("(%p)->(%s)\n", This, debugstr_guid(rguid));
memcpy(&This->m_Guid, rguid, sizeof(GUID));
return S_OK;
@ -358,7 +366,7 @@ static HRESULT WINAPI ICreateErrorInfoImpl_SetSource(
ICreateErrorInfo* iface,
LPOLESTR szSource)
{
_ICOM_THIS_From_ICreateErrorInfo(ErrorInfoImpl, iface);
ErrorInfoImpl *This = impl_from_ICreateErrorInfo(iface);
TRACE("(%p): %s\n",This, debugstr_w(szSource));
if (This->bstrSource != NULL)
ERRORINFO_SysFreeString(This->bstrSource);
@ -371,7 +379,7 @@ static HRESULT WINAPI ICreateErrorInfoImpl_SetDescription(
ICreateErrorInfo* iface,
LPOLESTR szDescription)
{
_ICOM_THIS_From_ICreateErrorInfo(ErrorInfoImpl, iface);
ErrorInfoImpl *This = impl_from_ICreateErrorInfo(iface);
TRACE("(%p): %s\n",This, debugstr_w(szDescription));
if (This->bstrDescription != NULL)
ERRORINFO_SysFreeString(This->bstrDescription);
@ -384,7 +392,7 @@ static HRESULT WINAPI ICreateErrorInfoImpl_SetHelpFile(
ICreateErrorInfo* iface,
LPOLESTR szHelpFile)
{
_ICOM_THIS_From_ICreateErrorInfo(ErrorInfoImpl, iface);
ErrorInfoImpl *This = impl_from_ICreateErrorInfo(iface);
TRACE("(%p,%s)\n",This,debugstr_w(szHelpFile));
if (This->bstrHelpFile != NULL)
ERRORINFO_SysFreeString(This->bstrHelpFile);
@ -396,7 +404,7 @@ static HRESULT WINAPI ICreateErrorInfoImpl_SetHelpContext(
ICreateErrorInfo* iface,
DWORD dwHelpContext)
{
_ICOM_THIS_From_ICreateErrorInfo(ErrorInfoImpl, iface);
ErrorInfoImpl *This = impl_from_ICreateErrorInfo(iface);
TRACE("(%p,%ld)\n",This,dwHelpContext);
This->m_dwHelpContext = dwHelpContext;
return S_OK;
@ -420,7 +428,7 @@ static HRESULT WINAPI ISupportErrorInfoImpl_QueryInterface(
REFIID riid,
VOID** ppvoid)
{
_ICOM_THIS_From_ISupportErrorInfo(ErrorInfoImpl, iface);
ErrorInfoImpl *This = impl_from_ISupportErrorInfo(iface);
TRACE("(%p)\n", This);
return IErrorInfo_QueryInterface(_IErrorInfo_(This), riid, ppvoid);
@ -429,7 +437,7 @@ static HRESULT WINAPI ISupportErrorInfoImpl_QueryInterface(
static ULONG WINAPI ISupportErrorInfoImpl_AddRef(
ISupportErrorInfo* iface)
{
_ICOM_THIS_From_ISupportErrorInfo(ErrorInfoImpl, iface);
ErrorInfoImpl *This = impl_from_ISupportErrorInfo(iface);
TRACE("(%p)\n", This);
return IErrorInfo_AddRef(_IErrorInfo_(This));
}
@ -437,7 +445,7 @@ static ULONG WINAPI ISupportErrorInfoImpl_AddRef(
static ULONG WINAPI ISupportErrorInfoImpl_Release(
ISupportErrorInfo* iface)
{
_ICOM_THIS_From_ISupportErrorInfo(ErrorInfoImpl, iface);
ErrorInfoImpl *This = impl_from_ISupportErrorInfo(iface);
TRACE("(%p)\n", This);
return IErrorInfo_Release(_IErrorInfo_(This));
}
@ -447,7 +455,7 @@ static HRESULT WINAPI ISupportErrorInfoImpl_InterfaceSupportsErrorInfo(
ISupportErrorInfo* iface,
REFIID riid)
{
_ICOM_THIS_From_ISupportErrorInfo(ErrorInfoImpl, iface);
ErrorInfoImpl *This = impl_from_ISupportErrorInfo(iface);
TRACE("(%p)->(%s)\n", This, debugstr_guid(riid));
return (IsEqualIID(riid, &This->m_Guid)) ? S_OK : S_FALSE;
}

View file

@ -60,6 +60,11 @@ typedef struct FileMonikerImpl{
IUnknown *pMarshal; /* custom marshaler */
} FileMonikerImpl;
static inline IMoniker *impl_from_IROTData( IROTData *iface )
{
return (IMoniker *)((char*)iface - FIELD_OFFSET(FileMonikerImpl, lpvtbl2));
}
/* Local function used by filemoniker implementation */
static HRESULT WINAPI FileMonikerImpl_Construct(FileMonikerImpl* iface, LPCOLESTR lpszPathName);
static HRESULT WINAPI FileMonikerImpl_Destroy(FileMonikerImpl* iface);
@ -1198,7 +1203,7 @@ static HRESULT WINAPI
FileMonikerROTDataImpl_QueryInterface(IROTData *iface,REFIID riid,VOID** ppvObject)
{
ICOM_THIS_From_IROTData(IMoniker, iface);
IMoniker *This = impl_from_IROTData(iface);
TRACE("(%p,%s,%p)\n",This,debugstr_guid(riid),ppvObject);
@ -1211,7 +1216,7 @@ FileMonikerROTDataImpl_QueryInterface(IROTData *iface,REFIID riid,VOID** ppvObje
static ULONG WINAPI
FileMonikerROTDataImpl_AddRef(IROTData *iface)
{
ICOM_THIS_From_IROTData(IMoniker, iface);
IMoniker *This = impl_from_IROTData(iface);
TRACE("(%p)\n",This);
@ -1224,7 +1229,7 @@ FileMonikerROTDataImpl_AddRef(IROTData *iface)
static ULONG WINAPI
FileMonikerROTDataImpl_Release(IROTData* iface)
{
ICOM_THIS_From_IROTData(IMoniker, iface);
IMoniker *This = impl_from_IROTData(iface);
TRACE("(%p)\n",This);
@ -1238,7 +1243,7 @@ static HRESULT WINAPI
FileMonikerROTDataImpl_GetComparisonData(IROTData* iface, BYTE* pbData,
ULONG cbMax, ULONG* pcbData)
{
ICOM_THIS_From_IROTData(IMoniker, iface);
IMoniker *This = impl_from_IROTData(iface);
FileMonikerImpl *This1 = (FileMonikerImpl *)This;
int len = (strlenW(This1->filePathName)+1);
int i;

View file

@ -47,8 +47,10 @@ typedef struct _FTMarshalImpl {
#define _IFTMUnknown_(This)(IUnknown*)&(This->lpVtbl)
#define _IFTMarshal_(This) (IMarshal*)&(This->lpvtblFTM)
#define _IFTMarshall_Offset ((int)(&(((FTMarshalImpl*)0)->lpvtblFTM)))
#define _ICOM_THIS_From_IFTMarshal(class, name) class* This = (class*)(((char*)name)-_IFTMarshall_Offset);
static inline FTMarshalImpl *impl_from_IMarshal( IMarshal *iface )
{
return (FTMarshalImpl *)((char*)iface - FIELD_OFFSET(FTMarshalImpl, lpvtblFTM));
}
/* inner IUnknown to handle aggregation */
static HRESULT WINAPI
@ -104,7 +106,7 @@ static HRESULT WINAPI
FTMarshalImpl_QueryInterface (LPMARSHAL iface, REFIID riid, LPVOID * ppv)
{
_ICOM_THIS_From_IFTMarshal (FTMarshalImpl, iface);
FTMarshalImpl *This = impl_from_IMarshal(iface);
TRACE ("(%p)->(\n\tIID:\t%s,%p)\n", This, debugstr_guid (riid), ppv);
return IUnknown_QueryInterface (This->pUnkOuter, riid, ppv);
@ -114,7 +116,7 @@ static ULONG WINAPI
FTMarshalImpl_AddRef (LPMARSHAL iface)
{
_ICOM_THIS_From_IFTMarshal (FTMarshalImpl, iface);
FTMarshalImpl *This = impl_from_IMarshal(iface);
TRACE ("\n");
return IUnknown_AddRef (This->pUnkOuter);
@ -124,7 +126,7 @@ static ULONG WINAPI
FTMarshalImpl_Release (LPMARSHAL iface)
{
_ICOM_THIS_From_IFTMarshal (FTMarshalImpl, iface);
FTMarshalImpl *This = impl_from_IMarshal(iface);
TRACE ("\n");
return IUnknown_Release (This->pUnkOuter);
@ -146,7 +148,7 @@ FTMarshalImpl_GetMarshalSizeMax (LPMARSHAL iface, REFIID riid, void *pv, DWORD d
IMarshal *pMarshal = NULL;
HRESULT hres;
_ICOM_THIS_From_IFTMarshal (FTMarshalImpl, iface);
FTMarshalImpl *This = impl_from_IMarshal(iface);
FIXME ("(), stub!\n");
@ -172,7 +174,7 @@ FTMarshalImpl_MarshalInterface (LPMARSHAL iface, IStream * pStm, REFIID riid, vo
IMarshal *pMarshal = NULL;
HRESULT hres;
_ICOM_THIS_From_IFTMarshal (FTMarshalImpl, iface);
FTMarshalImpl *This = impl_from_IMarshal(iface);
FIXME ("(), stub!\n");

View file

@ -39,6 +39,8 @@ typedef LPCSTR LPCOLESTR16;
*/
#undef INTERFACE
typedef struct IMalloc16 *LPMALLOC16;
#define INTERFACE IMalloc16
DECLARE_INTERFACE_(IMalloc16,IUnknown)
{
@ -64,6 +66,8 @@ extern LPMALLOC16 IMalloc16_Constructor(void);
/**********************************************************************/
typedef struct ILockBytes16 *LPLOCKBYTES16;
#define INTERFACE ILockBytes16
DECLARE_INTERFACE_(ILockBytes16,IUnknown)
{
@ -99,6 +103,8 @@ typedef struct tagSTATSTG16
DWORD reserved;
} STATSTG16;
typedef struct IStream16 *LPSTREAM16;
#define INTERFACE IStream16
DECLARE_INTERFACE_(IStream16,ISequentialStream)
{
@ -126,6 +132,8 @@ DECLARE_INTERFACE_(IStream16,ISequentialStream)
typedef OLECHAR16 **SNB16;
typedef struct IStorage16 *LPSTORAGE16;
#define INTERFACE IStorage16
DECLARE_INTERFACE_(IStorage16,IUnknown)
{

View file

@ -61,6 +61,11 @@ typedef struct ItemMonikerImpl{
IUnknown *pMarshal; /* custom marshaler */
} ItemMonikerImpl;
static inline IMoniker *impl_from_IROTData( IROTData *iface )
{
return (IMoniker *)((char*)iface - FIELD_OFFSET(ItemMonikerImpl, lpvtbl2));
}
/********************************************************************************/
/* ItemMoniker prototype functions : */
@ -929,7 +934,7 @@ HRESULT WINAPI ItemMonikerImpl_IsSystemMoniker(IMoniker* iface,DWORD* pwdMksys)
HRESULT WINAPI ItemMonikerROTDataImpl_QueryInterface(IROTData *iface,REFIID riid,VOID** ppvObject)
{
ICOM_THIS_From_IROTData(IMoniker, iface);
IMoniker *This = impl_from_IROTData(iface);
TRACE("(%p,%p,%p)\n",iface,riid,ppvObject);
@ -941,7 +946,7 @@ HRESULT WINAPI ItemMonikerROTDataImpl_QueryInterface(IROTData *iface,REFIID riid
*/
ULONG WINAPI ItemMonikerROTDataImpl_AddRef(IROTData *iface)
{
ICOM_THIS_From_IROTData(IMoniker, iface);
IMoniker *This = impl_from_IROTData(iface);
TRACE("(%p)\n",iface);
@ -953,7 +958,7 @@ ULONG WINAPI ItemMonikerROTDataImpl_AddRef(IROTData *iface)
*/
ULONG WINAPI ItemMonikerROTDataImpl_Release(IROTData* iface)
{
ICOM_THIS_From_IROTData(IMoniker, iface);
IMoniker *This = impl_from_IROTData(iface);
TRACE("(%p)\n",iface);
@ -968,7 +973,7 @@ HRESULT WINAPI ItemMonikerROTDataImpl_GetComparisonData(IROTData* iface,
ULONG cbMax,
ULONG* pcbData)
{
ICOM_THIS_From_IROTData(IMoniker, iface);
IMoniker *This = impl_from_IROTData(iface);
ItemMonikerImpl *This1 = (ItemMonikerImpl *)This;
int len = (strlenW(This1->itemName)+1);
int i;

View file

@ -269,7 +269,7 @@ static HRESULT WINAPI ClientIdentity_QueryMultipleInterfaces(IMultiQI *iface, UL
/* get the ipid of the first entry */
/* FIXME: should we implement ClientIdentity on the ifproxies instead
* of the proxy_manager so we use the correct ipid here? */
ipid = &LIST_ENTRY(list_head(&This->interfaces), struct ifproxy, entry)->ipid;
ipid = &LIST_ENTRY(list_head(&This->interfaces), struct ifproxy, entry)->stdobjref.ipid;
/* get IRemUnknown proxy so we can communicate with the remote object */
hr = proxy_manager_get_remunknown(This, &remunk);
@ -329,6 +329,72 @@ static const IMultiQIVtbl ClientIdentity_Vtbl =
ClientIdentity_QueryMultipleInterfaces
};
static HRESULT WINAPI Proxy_QueryInterface(IMarshal *iface, REFIID riid, void **ppvObject)
{
ICOM_THIS_MULTI(struct proxy_manager, lpVtblMarshal, iface);
return IMultiQI_QueryInterface((IMultiQI *)&This->lpVtbl, riid, ppvObject);
}
static ULONG WINAPI Proxy_AddRef(IMarshal *iface)
{
ICOM_THIS_MULTI(struct proxy_manager, lpVtblMarshal, iface);
return IMultiQI_AddRef((IMultiQI *)&This->lpVtbl);
}
/* FIXME: remove these */
static HRESULT WINAPI StdMarshalImpl_GetUnmarshalClass(LPMARSHAL iface, REFIID riid, void* pv, DWORD dwDestContext, void* pvDestContext, DWORD mshlflags, CLSID* pCid);
static HRESULT WINAPI StdMarshalImpl_GetMarshalSizeMax(LPMARSHAL iface, REFIID riid, void* pv, DWORD dwDestContext, void* pvDestContext, DWORD mshlflags, DWORD* pSize);
static HRESULT WINAPI StdMarshalImpl_UnmarshalInterface(LPMARSHAL iface, IStream *pStm, REFIID riid, void **ppv);
static HRESULT WINAPI StdMarshalImpl_ReleaseMarshalData(LPMARSHAL iface, IStream *pStm);
static HRESULT WINAPI StdMarshalImpl_DisconnectObject(LPMARSHAL iface, DWORD dwReserved);
static ULONG WINAPI Proxy_Release(IMarshal *iface)
{
ICOM_THIS_MULTI(struct proxy_manager, lpVtblMarshal, iface);
return IMultiQI_Release((IMultiQI *)&This->lpVtbl);
}
static HRESULT WINAPI Proxy_MarshalInterface(
LPMARSHAL iface, IStream *pStm, REFIID riid, void* pv, DWORD dwDestContext,
void* pvDestContext, DWORD mshlflags)
{
ICOM_THIS_MULTI(struct proxy_manager, lpVtblMarshal, iface);
ULONG res;
HRESULT hr;
STDOBJREF stdobjref;
struct ifproxy *ifproxy;
TRACE("(...,%s,...)\n", debugstr_guid(riid));
hr = proxy_manager_find_ifproxy(This, riid, &ifproxy);
if (FAILED(hr))
{
ERR("couldn't find proxy for interface %s, error 0x%08lx\n", debugstr_guid(riid), hr);
return hr;
}
stdobjref = ifproxy->stdobjref;
/* FIXME: optimization - share out proxy's public references if possible
* instead of making new proxy do a roundtrip through the server */
stdobjref.cPublicRefs = 0; /* InterlockedDecrement(&This->stdobjref.cPublicRefs) >= 0 ? 1 : 0 */
hr = IStream_Write(pStm, &stdobjref, sizeof(stdobjref), &res);
return hr;
}
static const IMarshalVtbl ProxyMarshal_Vtbl =
{
Proxy_QueryInterface,
Proxy_AddRef,
Proxy_Release,
StdMarshalImpl_GetUnmarshalClass,
StdMarshalImpl_GetMarshalSizeMax,
Proxy_MarshalInterface,
StdMarshalImpl_UnmarshalInterface,
StdMarshalImpl_ReleaseMarshalData,
StdMarshalImpl_DisconnectObject
};
static HRESULT ifproxy_get_public_ref(struct ifproxy * This)
{
HRESULT hr = S_OK;
@ -350,7 +416,7 @@ static HRESULT ifproxy_get_public_ref(struct ifproxy * This)
{
HRESULT hrref;
REMINTERFACEREF rif;
rif.ipid = This->ipid;
rif.ipid = This->stdobjref.ipid;
rif.cPublicRefs = NORMALEXTREFS;
rif.cPrivateRefs = 0;
hr = IRemUnknown_RemAddRef(remunk, 1, &rif, &hrref);
@ -385,7 +451,7 @@ static HRESULT ifproxy_release_public_refs(struct ifproxy * This)
if (hr == S_OK)
{
REMINTERFACEREF rif;
rif.ipid = This->ipid;
rif.ipid = This->stdobjref.ipid;
rif.cPublicRefs = This->refs;
rif.cPrivateRefs = 0;
hr = IRemUnknown_RemRelease(remunk, 1, &rif);
@ -454,6 +520,7 @@ static HRESULT proxy_manager_construct(
}
This->lpVtbl = &ClientIdentity_Vtbl;
This->lpVtblMarshal = &ProxyMarshal_Vtbl;
list_init(&This->entry);
list_init(&This->interfaces);
@ -505,9 +572,21 @@ static HRESULT proxy_manager_query_local_interface(struct proxy_manager * This,
IsEqualIID(riid, &IID_IMultiQI))
{
*ppv = (void *)&This->lpVtbl;
IMultiQI_AddRef((IMultiQI *)&This->lpVtbl);
IUnknown_AddRef((IUnknown *)*ppv);
return S_OK;
}
if (IsEqualIID(riid, &IID_IMarshal))
{
*ppv = (void *)&This->lpVtblMarshal;
IUnknown_AddRef((IUnknown *)*ppv);
return S_OK;
}
if (IsEqualIID(riid, &IID_IClientSecurity))
{
FIXME("requesting IClientSecurity, but it is unimplemented\n");
*ppv = NULL;
return E_NOINTERFACE;
}
hr = proxy_manager_find_ifproxy(This, riid, &ifproxy);
if (hr == S_OK)
@ -522,7 +601,7 @@ static HRESULT proxy_manager_query_local_interface(struct proxy_manager * This,
}
static HRESULT proxy_manager_create_ifproxy(
struct proxy_manager * This, const IPID *ipid, REFIID riid, ULONG cPublicRefs,
struct proxy_manager * This, const STDOBJREF *stdobjref, REFIID riid,
IRpcChannelBuffer * channel, struct ifproxy ** iif_out)
{
HRESULT hr;
@ -533,9 +612,9 @@ static HRESULT proxy_manager_create_ifproxy(
list_init(&ifproxy->entry);
ifproxy->parent = This;
ifproxy->ipid = *ipid;
ifproxy->stdobjref = *stdobjref;
ifproxy->iid = *riid;
ifproxy->refs = cPublicRefs;
ifproxy->refs = stdobjref->cPublicRefs;
ifproxy->proxy = NULL;
assert(channel);
@ -584,7 +663,7 @@ static HRESULT proxy_manager_create_ifproxy(
*iif_out = ifproxy;
TRACE("ifproxy %p created for IPID %s, interface %s with %lu public refs\n",
ifproxy, debugstr_guid(ipid), debugstr_guid(riid), cPublicRefs);
ifproxy, debugstr_guid(&stdobjref->ipid), debugstr_guid(riid), stdobjref->cPublicRefs);
}
else
ifproxy_destroy(ifproxy);
@ -901,14 +980,12 @@ static HRESULT unmarshal_object(const STDOBJREF *stdobjref, APARTMENT *apt, REFI
IRpcChannelBuffer *chanbuf;
hr = RPC_CreateClientChannel(&stdobjref->oxid, &stdobjref->ipid, &chanbuf);
if (hr == S_OK)
hr = proxy_manager_create_ifproxy(proxy_manager, &stdobjref->ipid,
riid, stdobjref->cPublicRefs,
chanbuf, &ifproxy);
hr = proxy_manager_create_ifproxy(proxy_manager, stdobjref,
riid, chanbuf, &ifproxy);
}
if (hr == S_OK)
{
/* FIXME: push this AddRef inside proxy_manager_find_ifproxy/create_ifproxy? */
ClientIdentity_AddRef((IMultiQI*)&proxy_manager->lpVtbl);
*object = ifproxy->iface;
}
@ -958,7 +1035,7 @@ StdMarshalImpl_UnmarshalInterface(LPMARSHAL iface, IStream *pStm, REFIID riid, v
/* unref the ifstub. FIXME: only do this on success? */
if (!stub_manager_is_table_marshaled(stubmgr))
stub_manager_ext_release(stubmgr, 1);
stub_manager_ext_release(stubmgr, stdobjref.cPublicRefs);
stub_manager_int_release(stubmgr);
return hres;

View file

@ -981,8 +981,6 @@ static HRESULT WINAPI EnumMonikerImpl_CreateEnumROTMoniker(MInterfacePointer **m
/* Shared implementation of moniker marshaler based on saving and loading of
* monikers */
#define ICOM_THIS_From_IMoniker(class, name) class* This = (class*)(((char*)name)-FIELD_OFFSET(class, lpVtblMarshal))
typedef struct MonikerMarshal
{
const IUnknownVtbl *lpVtbl;
@ -992,6 +990,11 @@ typedef struct MonikerMarshal
IMoniker *moniker;
} MonikerMarshal;
static inline MonikerMarshal *impl_from_IMarshal( IMarshal *iface )
{
return (MonikerMarshal *)((char*)iface - FIELD_OFFSET(MonikerMarshal, lpVtblMarshal));
}
static HRESULT WINAPI MonikerMarshalInner_QueryInterface(IUnknown *iface, REFIID riid, LPVOID *ppv)
{
MonikerMarshal *This = (MonikerMarshal *)iface;
@ -1031,19 +1034,19 @@ static const IUnknownVtbl VT_MonikerMarshalInner =
static HRESULT WINAPI MonikerMarshal_QueryInterface(IMarshal *iface, REFIID riid, LPVOID *ppv)
{
ICOM_THIS_From_IMoniker(MonikerMarshal, iface);
MonikerMarshal *This = impl_from_IMarshal(iface);
return IMoniker_QueryInterface(This->moniker, riid, ppv);
}
static ULONG WINAPI MonikerMarshal_AddRef(IMarshal *iface)
{
ICOM_THIS_From_IMoniker(MonikerMarshal, iface);
MonikerMarshal *This = impl_from_IMarshal(iface);
return IMoniker_AddRef(This->moniker);
}
static ULONG WINAPI MonikerMarshal_Release(IMarshal *iface)
{
ICOM_THIS_From_IMoniker(MonikerMarshal, iface);
MonikerMarshal *This = impl_from_IMarshal(iface);
return IMoniker_Release(This->moniker);
}
@ -1051,7 +1054,7 @@ static HRESULT WINAPI MonikerMarshal_GetUnmarshalClass(
LPMARSHAL iface, REFIID riid, void* pv, DWORD dwDestContext,
void* pvDestContext, DWORD mshlflags, CLSID* pCid)
{
ICOM_THIS_From_IMoniker(MonikerMarshal, iface);
MonikerMarshal *This = impl_from_IMarshal(iface);
TRACE("(%s, %p, %lx, %p, %lx, %p)\n", debugstr_guid(riid), pv,
dwDestContext, pvDestContext, mshlflags, pCid);
@ -1063,7 +1066,7 @@ static HRESULT WINAPI MonikerMarshal_GetMarshalSizeMax(
LPMARSHAL iface, REFIID riid, void* pv, DWORD dwDestContext,
void* pvDestContext, DWORD mshlflags, DWORD* pSize)
{
ICOM_THIS_From_IMoniker(MonikerMarshal, iface);
MonikerMarshal *This = impl_from_IMarshal(iface);
HRESULT hr;
ULARGE_INTEGER size;
@ -1080,7 +1083,7 @@ static HRESULT WINAPI MonikerMarshal_MarshalInterface(LPMARSHAL iface, IStream *
REFIID riid, void* pv, DWORD dwDestContext,
void* pvDestContext, DWORD mshlflags)
{
ICOM_THIS_From_IMoniker(MonikerMarshal, iface);
MonikerMarshal *This = impl_from_IMarshal(iface);
TRACE("(%p, %s, %p, %lx, %p, %lx)\n", pStm, debugstr_guid(riid), pv,
dwDestContext, pvDestContext, mshlflags);
@ -1090,7 +1093,7 @@ static HRESULT WINAPI MonikerMarshal_MarshalInterface(LPMARSHAL iface, IStream *
static HRESULT WINAPI MonikerMarshal_UnmarshalInterface(LPMARSHAL iface, IStream *pStm, REFIID riid, void **ppv)
{
ICOM_THIS_From_IMoniker(MonikerMarshal, iface);
MonikerMarshal *This = impl_from_IMarshal(iface);
HRESULT hr;
TRACE("(%p, %s, %p)\n", pStm, debugstr_guid(riid), ppv);

View file

@ -1,8 +1,6 @@
#ifndef __WINE_MONIKER_H__
#define __WINE_MONIKER_H__
#define ICOM_THIS_From_IROTData(class, name) class* This = (class*)(((char*)name)-sizeof(void*))
extern const CLSID CLSID_FileMoniker;
extern const CLSID CLSID_ItemMoniker;
extern const CLSID CLSID_AntiMoniker;

View file

@ -285,10 +285,6 @@ HRESULT WINAPI CLSIDFromString16(
return __CLSIDFromStringA(idstr,id);
}
extern BOOL WINAPI K32WOWCallback16Ex( DWORD vpfn16, DWORD dwFlags,
DWORD cbArgs, LPVOID pArgs,
LPDWORD pdwRetCode );
/******************************************************************************
* _xmalloc16 [internal]
* Allocates size bytes from the standard ole16 allocator.
@ -309,7 +305,7 @@ _xmalloc16(DWORD size, SEGPTR *ptr) {
/* No need for a Callback entry, we have WOWCallback16Ex which does
* everything we need.
*/
if (!K32WOWCallback16Ex(
if (!WOWCallback16Ex(
(DWORD)((const IMalloc16Vtbl*)MapSL(
(SEGPTR)((LPMALLOC16)MapSL((SEGPTR)mllc))->lpVtbl )
)->Alloc,

View file

@ -2322,7 +2322,16 @@ done:
/******************************************************************************
* OleDoAutoConvert [OLE32.@]
*/
HRESULT WINAPI OleDoAutoConvert(IStorage *pStg, LPCLSID pClsidNew)
HRESULT WINAPI OleDoAutoConvert(LPSTORAGE pStg, LPCLSID pClsidNew)
{
FIXME("(%p,%p) : stub\n",pStg,pClsidNew);
return E_NOTIMPL;
}
/******************************************************************************
* OleDoAutoConvert [OLE2.79]
*/
HRESULT WINAPI OleDoAutoConvert16(LPSTORAGE pStg, LPCLSID pClsidNew)
{
FIXME("(%p,%p) : stub\n",pStg,pClsidNew);
return E_NOTIMPL;

View file

@ -9,13 +9,13 @@
9 stub OLECREATELINKFROMDATA
10 stub OLECREATE
11 stub OLECREATELINK
12 stub OLELOAD
12 pascal OleLoad(segptr ptr segptr ptr) OleLoad16
13 stub OLESAVE
14 stub OLERUN
#15 ___EXPORTEDSTUB
16 stub OLEISRUNNING
17 stub OLELOCKRUNNING
18 stub READCLASSSTG
18 pascal ReadClassStg(segptr ptr) ReadClassStg16
19 stub WRITECLASSSTG
20 stub READCLASSSTM
21 stub WRITECLASSSTM
@ -74,10 +74,10 @@
76 pascal -ret16 OleFlushClipboard() OleFlushClipboard16
77 stub OLEISCURRENTCLIPBOARD
78 stub OLETRANSLATEACCELERATOR
79 stub OLEDOAUTOCONVERT
79 pascal OleDoAutoConvert(ptr ptr) OleDoAutoConvert16
80 stub OLEGETAUTOCONVERT
81 stub OLESETAUTOCONVERT
82 stub GETCONVERTSTG
82 pascal GetConvertStg(ptr) GetConvertStg16
83 stub SETCONVERTSTG
84 stub CREATESTREAMONHGLOBAL
85 stub GETHGLOBALFROMSTREAM

View file

@ -192,3 +192,20 @@ BOOL WINAPI IsValidInterface16(SEGPTR punk)
return FALSE;
return TRUE;
}
/******************************************************************************
* OleLoad [OLE2.12]
*
* PARAMS
* pStg Segmented LPSTORAGE pointer.
* pClientSite Segmented LPOLECLIENTSITE pointer.
*/
HRESULT WINAPI OleLoad16(
SEGPTR pStg,
REFIID riid,
SEGPTR pClientSite,
LPVOID* ppvObj)
{
FIXME("(%lx,%s,%lx,%p), stub!\n", pStg, debugstr_guid(riid), pClientSite, ppvObj);
return E_NOTIMPL;
}

View file

@ -6,6 +6,7 @@
@ stdcall CLSIDFromProgID(wstr ptr)
@ stdcall CLSIDFromString(wstr ptr)
@ stdcall CoAddRefServerProcess()
@ stdcall CoAllowSetForegroundWindow(ptr ptr)
@ stdcall CoBuildVersion()
@ stdcall CoCopyProxy(ptr ptr)
@ stdcall CoCreateFreeThreadedMarshaler(ptr ptr)
@ -90,7 +91,7 @@
@ stub CreatePointerMoniker #@ stdcall (ptr ptr) return 0,ERR_NOTIMPLEMENTED
@ stdcall CreateStreamOnHGlobal(ptr long ptr)
@ stdcall DllDebugObjectRPCHook(long ptr)
@ stdcall -private DllGetClassObject (ptr ptr ptr) OLE32_DllGetClassObject
@ stdcall -private DllGetClassObject (ptr ptr ptr)
@ stub DllGetClassObjectWOW
@ stdcall -private DllRegisterServer()
@ stdcall -private DllUnregisterServer()

View file

@ -989,7 +989,7 @@ static const IPSFactoryBufferVtbl *lppsfac = &psfacbufvtbl;
/***********************************************************************
* DllGetClassObject [OLE32.@]
*/
HRESULT WINAPI OLE32_DllGetClassObject(REFCLSID rclsid, REFIID iid,LPVOID *ppv)
HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID iid,LPVOID *ppv)
{
*ppv = NULL;
if (IsEqualIID(rclsid, &CLSID_PSFactoryBuffer))

View file

@ -63,9 +63,10 @@
WINE_DEFAULT_DEBUG_CHANNEL(storage);
#define _IPropertySetStorage_Offset ((int)(&(((StorageImpl*)0)->base.pssVtbl)))
#define _ICOM_THIS_From_IPropertySetStorage(class, name) \
class* This = (class*)(((char*)name)-_IPropertySetStorage_Offset)
static inline StorageImpl *impl_from_IPropertySetStorage( IPropertySetStorage *iface )
{
return (StorageImpl *)((char*)iface - FIELD_OFFSET(StorageImpl, base.pssVtbl));
}
/* These are documented in MSDN, e.g.
* http://msdn.microsoft.com/library/en-us/stg/stg/property_set_header.asp
@ -1021,7 +1022,7 @@ static HRESULT PropertyStorage_ReadDictionary(PropertyStorage_impl *This,
ptr[cbEntry - 1] = '\0';
else
*((LPWSTR)ptr + cbEntry / sizeof(WCHAR)) = '\0';
hr = PropertyStorage_StoreNameWithId(This, ptr, This->codePage, propid);
hr = PropertyStorage_StoreNameWithId(This, (char*)ptr, This->codePage, propid);
if (This->codePage == CP_UNICODE)
{
/* Unicode entries are padded to DWORD boundaries */
@ -1059,7 +1060,7 @@ static HRESULT PropertyStorage_ReadProperty(PropertyStorage_impl *This,
TRACE("Read byte 0x%x\n", prop->u.bVal);
break;
case VT_I2:
StorageUtl_ReadWord(data, 0, &prop->u.iVal);
StorageUtl_ReadWord(data, 0, (WORD*)&prop->u.iVal);
TRACE("Read short %d\n", prop->u.iVal);
break;
case VT_UI2:
@ -1068,7 +1069,7 @@ static HRESULT PropertyStorage_ReadProperty(PropertyStorage_impl *This,
break;
case VT_INT:
case VT_I4:
StorageUtl_ReadDWord(data, 0, &prop->u.lVal);
StorageUtl_ReadDWord(data, 0, (DWORD*)&prop->u.lVal);
TRACE("Read long %ld\n", prop->u.lVal);
break;
case VT_UINT:
@ -2039,7 +2040,7 @@ static HRESULT WINAPI IPropertySetStorage_fnQueryInterface(
REFIID riid,
void** ppvObject)
{
_ICOM_THIS_From_IPropertySetStorage(StorageImpl, ppstg);
StorageImpl *This = impl_from_IPropertySetStorage(ppstg);
return IStorage_QueryInterface( (IStorage*)This, riid, ppvObject );
}
@ -2051,7 +2052,7 @@ static HRESULT WINAPI IPropertySetStorage_fnQueryInterface(
static ULONG WINAPI IPropertySetStorage_fnAddRef(
IPropertySetStorage *ppstg)
{
_ICOM_THIS_From_IPropertySetStorage(StorageImpl, ppstg);
StorageImpl *This = impl_from_IPropertySetStorage(ppstg);
return IStorage_AddRef( (IStorage*)This );
}
@ -2063,7 +2064,7 @@ static ULONG WINAPI IPropertySetStorage_fnAddRef(
static ULONG WINAPI IPropertySetStorage_fnRelease(
IPropertySetStorage *ppstg)
{
_ICOM_THIS_From_IPropertySetStorage(StorageImpl, ppstg);
StorageImpl *This = impl_from_IPropertySetStorage(ppstg);
return IStorage_Release( (IStorage*)This );
}
@ -2078,7 +2079,7 @@ static HRESULT WINAPI IPropertySetStorage_fnCreate(
DWORD grfMode,
IPropertyStorage** ppprstg)
{
_ICOM_THIS_From_IPropertySetStorage(StorageImpl, ppstg);
StorageImpl *This = impl_from_IPropertySetStorage(ppstg);
WCHAR name[CCH_MAX_PROPSTG_NAME];
IStream *stm = NULL;
HRESULT r;
@ -2133,7 +2134,7 @@ static HRESULT WINAPI IPropertySetStorage_fnOpen(
DWORD grfMode,
IPropertyStorage** ppprstg)
{
_ICOM_THIS_From_IPropertySetStorage(StorageImpl, ppstg);
StorageImpl *This = impl_from_IPropertySetStorage(ppstg);
IStream *stm = NULL;
WCHAR name[CCH_MAX_PROPSTG_NAME];
HRESULT r;
@ -2176,7 +2177,7 @@ static HRESULT WINAPI IPropertySetStorage_fnDelete(
IPropertySetStorage *ppstg,
REFFMTID rfmtid)
{
_ICOM_THIS_From_IPropertySetStorage(StorageImpl, ppstg);
StorageImpl *This = impl_from_IPropertySetStorage(ppstg);
IStorage *stg = NULL;
WCHAR name[CCH_MAX_PROPSTG_NAME];
HRESULT r;
@ -2201,7 +2202,7 @@ static HRESULT WINAPI IPropertySetStorage_fnEnum(
IPropertySetStorage *ppstg,
IEnumSTATPROPSETSTG** ppenum)
{
_ICOM_THIS_From_IPropertySetStorage(StorageImpl, ppstg);
StorageImpl *This = impl_from_IPropertySetStorage(ppstg);
FIXME("%p\n", This);
return E_NOTIMPL;
}

File diff suppressed because it is too large Load diff

View file

@ -6,7 +6,7 @@
2 stub StgCreateDocFileOnILockBytes
# 2 pascal StgCreateDocFileOnILockBytes(ptr long long ptr) StgCreateDocFileOnILockBytes16
3 pascal StgOpenStorage(str ptr long ptr long ptr) StgOpenStorage16
4 pascal StgOpenStorageOnILockBytes(ptr ptr long long long ptr) StgOpenStorageOnILockBytes16
4 pascal StgOpenStorageOnILockBytes(segptr ptr long long long ptr) StgOpenStorageOnILockBytes16
5 pascal StgIsStorageFile(str) StgIsStorageFile16
6 pascal StgIsStorageILockBytes(segptr) StgIsStorageILockBytes16
7 stub StgSetTimes

View file

@ -58,8 +58,6 @@
WINE_DEFAULT_DEBUG_CHANNEL(storage);
#define FILE_BEGIN 0
/* Used for OleConvertIStorageToOLESTREAM and OleConvertOLESTREAMToIStorage */
#define OLESTREAM_ID 0x501
#define OLESTREAM_MAX_STR_LEN 255
@ -7093,7 +7091,7 @@ HRESULT OLECONVERT_CreateCompObjStream(LPSTORAGE pStorage, LPCSTR strOleTypeName
{
char strTemp[OLESTREAM_MAX_STR_LEN];
IStorageCompObj.dwCLSIDNameLength = OLESTREAM_MAX_STR_LEN;
hErr = RegQueryValueA(hKey, NULL, strTemp, &(IStorageCompObj.dwCLSIDNameLength));
hErr = RegQueryValueA(hKey, NULL, strTemp, (LONG*) &(IStorageCompObj.dwCLSIDNameLength));
if(hErr == ERROR_SUCCESS)
{
strcpy(IStorageCompObj.strCLSIDName, strTemp);