WindowsXP-SP1/com/ole32/olethunk/h/obj16.hxx
2020-09-30 16:53:49 +02:00

157 lines
3.7 KiB
C++

//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1992 - 1994.
//
// File: obj16.hxx
//
// Contents: 16->32 object definition header
//
// History: 23-Mar-94 JohannP Created
// 22-May-94 BobDay Split thkmgr.hxx into a mode
// independent file
//
// WARNING: THIS HEADER FILE IS INCLUDED IN BOTH 16-bit CODE and 32-bit CODE
// ANY DECLARATIONS SHOULD BE MODE NEUTRAL.
//
//----------------------------------------------------------------------------
#ifndef __OBJ16_HXX__
#define __OBJ16_HXX__
//+---------------------------------------------------------------------------
//
// Structure: PROXYPTR (pprx)
//
// Purpose: A 16:16 or 32-bit pointer to a proxy
//
// History: 15-Jul-94 DrewB Created
//
//----------------------------------------------------------------------------
#define PPRX_NONE 0
#define PPRX_16 1
#define PPRX_32 2
struct PROXYPTR
{
PROXYPTR(void)
{
};
PROXYPTR(DWORD dwVal, DWORD wTy)
{
dwPtrVal = dwVal;
wType = wTy;
};
DWORD dwPtrVal;
DWORD wType;
};
//+---------------------------------------------------------------------------
//
// Structure: PROXYHOLDER (ph)
//
// Purpose: Provides object identity for multiple proxies
//
// History: 07-Jul-94 DrewB Created
//
//----------------------------------------------------------------------------
class CProxy;
// Proxy holder flags
#define PH_NORMAL 0x01
#define PH_AGGREGATEE 0x02
#define PH_AGGREGATOR 0x04
#define PH_IDREVOKED 0x08
typedef struct tagPROXYHOLDER
{
LONG cProxies;
DWORD dwFlags;
PROXYPTR unkProxy;
PROXYPTR pprxProxies;
} PROXYHOLDER;
//+---------------------------------------------------------------------------
//
// Class: CProxy (prx)
//
// Purpose: Common proxy data
//
// History: 07-Jul-94 DrewB Created
//
//----------------------------------------------------------------------------
#if DBG == 1
// Define some signatures for doing proxy memory validation
#define PSIG1632 0x16320000
#define PSIG1632DEAD 0x1632DEAD
#define PSIG1632TEMP 0x16321632
#define PSIG3216 0x32160000
#define PSIG3216DEAD 0x3216DEAD
#endif
#define PROXYFLAG_STATUS 0x000f
#define PROXYFLAG_NORMAL 0x0000
#define PROXYFLAG_LOCKED 0x0001
#define PROXYFLAG_TEMPORARY 0x0002
#define PROXYFLAG_CLEANEDUP 0x0004
#define PROXYFLAG_REVIVED 0x0008
#define PROXYFLAG_TYPE 0x00f0
#define PROXYFLAG_NONE 0x0000
#define PROXYFLAG_PUNKOUTER 0x0010
#define PROXYFLAG_PUNKINNER 0x0020
#define PROXYFLAG_PUNK 0x0040
#define PROXYFLAG_PIFACE 0x0080
class CProxy
{
public:
// Vtable pointer
DWORD pfnVtbl;
// References passed on to the real object
LONG cRef;
// Proxy ref count
LONG cRefLocal;
// Interface being proxied
// Currently the iidx here is always an index
IIDIDX iidx;
// Object that this proxy is part of
PROXYHOLDER FAR *pphHolder;
// Sibling proxy pointer within an object
PROXYPTR pprxObject;
// Flags, combines with word in PROXYPTR for alignment
DWORD grfFlags;
#if DBG == 1
DWORD dwSignature;
#endif
};
// 16->32 proxy
class CProxy1632 : public CProxy
{
public:
LPUNKNOWN punkThis32;
};
// 32->16 proxy
class CProxy3216 : public CProxy
{
public:
DWORD vpvThis16;
};
typedef CProxy1632 THUNK1632OBJ;
typedef CProxy3216 THUNK3216OBJ;
#endif // #ifndef __OBJ16_HXX__