158 lines
4 KiB
C++
158 lines
4 KiB
C++
|
//-----------------------------------------------------------------------------
|
||
|
//
|
||
|
// Microsoft Windows
|
||
|
// Copyright (C) Microsoft Corporation, 1992 - 1995.
|
||
|
//
|
||
|
// File: CRSEmbed.hxx
|
||
|
//
|
||
|
// Contents: IUnknown embedder for temptable.
|
||
|
//
|
||
|
// Functions:
|
||
|
//
|
||
|
// Notes:
|
||
|
//
|
||
|
//
|
||
|
// History: 08/30/96 | RenatoB | Created
|
||
|
//----------------------------------------------------------------------------
|
||
|
|
||
|
#ifndef _CREMBED_H_
|
||
|
#define _CREMBED_H_
|
||
|
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// @class CRowsetInfo | ADSI embedding of Rowset,
|
||
|
// to give our IrowsetInfo interface
|
||
|
//
|
||
|
//
|
||
|
//-----------------------------------------------------------------------------
|
||
|
|
||
|
class CRowProvider;
|
||
|
class CRowsetInfo;
|
||
|
class CCommandObject;
|
||
|
class CSessionObject;
|
||
|
|
||
|
class CRowsetInfo : INHERIT_TRACKING,
|
||
|
public IRowsetInfo
|
||
|
{
|
||
|
friend HRESULT CreateTempTable(
|
||
|
IRowProvider*,
|
||
|
IUnknown*, IUnknown* ,
|
||
|
CSessionObject* ,
|
||
|
CCommandObject* ,
|
||
|
ULONG,DBPROPSET[],
|
||
|
ULONG,
|
||
|
HACCESSOR[],
|
||
|
REFIID,
|
||
|
IUnknown**
|
||
|
);
|
||
|
|
||
|
public:
|
||
|
|
||
|
DECLARE_STD_REFCOUNTING
|
||
|
|
||
|
DECLARE_IRowsetInfo_METHODS
|
||
|
|
||
|
STDMETHODIMP QueryInterface(REFIID, LPVOID *);
|
||
|
|
||
|
CRowsetInfo(
|
||
|
IUnknown *pUnkOuter,
|
||
|
IUnknown *pParentObject,
|
||
|
CSessionObject *pCSession,
|
||
|
CCommandObject *pCCommand
|
||
|
);
|
||
|
|
||
|
~CRowsetInfo();
|
||
|
|
||
|
STDMETHODIMP FInit(
|
||
|
IUnknown *pRowset //@parm IN| TmpTable interface
|
||
|
);
|
||
|
|
||
|
private:
|
||
|
|
||
|
|
||
|
STDMETHODIMP InitProperties(void);
|
||
|
|
||
|
// Frees the memory of an array of PropertySets
|
||
|
STDMETHODIMP_(void)
|
||
|
FreePropertySets(
|
||
|
ULONG cPropertySets, // Count of property sets
|
||
|
DBPROPSET *rgPropertySets // Array of property sets to be freed
|
||
|
);
|
||
|
|
||
|
STDMETHODIMP_(LONG )SearchGuid(
|
||
|
GUID riid // GUID of the DBPROPSET
|
||
|
);
|
||
|
STDMETHODIMP_(LONG )SearchPropid(
|
||
|
ULONG ibPropertySet,
|
||
|
DWORD dwPropertyID
|
||
|
);
|
||
|
|
||
|
IUnknown *_pUnkOuter;
|
||
|
IUnknown *_pRowset;
|
||
|
IUnknown *_pParentObject;
|
||
|
CSessionObject *_pCSession;
|
||
|
CCommandObject *_pCCommand;
|
||
|
CRITICAL_SECTION _csRowsetInfo;
|
||
|
|
||
|
IMalloc* _pMalloc;
|
||
|
ULONG _cPropertySets;
|
||
|
DBPROPSET *_pPropertySets;
|
||
|
|
||
|
// Status word.
|
||
|
enum Status {
|
||
|
STAT_UNINIT = 0x0000, //GetProperties Not initialized
|
||
|
STAT_DIDINIT = 0x0001, //Get Properties initialized successfully
|
||
|
STAT_INITERROR = 0x0002, //Get Properties Failed initialization
|
||
|
};
|
||
|
DWORD _dwStatus;
|
||
|
|
||
|
};
|
||
|
|
||
|
class CAutoBlock {
|
||
|
friend class CRowsetInfo;
|
||
|
friend class CRowsetInfo;
|
||
|
friend class CImpIAccessor;
|
||
|
private:
|
||
|
CAutoBlock( CRITICAL_SECTION *pCrit );
|
||
|
~CAutoBlock();
|
||
|
void UnBlock();
|
||
|
CRITICAL_SECTION *_pCrit;
|
||
|
};
|
||
|
|
||
|
inline CAutoBlock::CAutoBlock(
|
||
|
CRITICAL_SECTION *pCrit ) //@parm IN | The critical section.
|
||
|
{
|
||
|
// It is OK to pass a NULL ptr to this routine. It is a NOOP.
|
||
|
// Note that passing NULL to EnterCriticalSection blows up.
|
||
|
|
||
|
if (pCrit)
|
||
|
::EnterCriticalSection( pCrit );
|
||
|
_pCrit = pCrit;
|
||
|
};
|
||
|
|
||
|
|
||
|
inline CAutoBlock::~CAutoBlock()
|
||
|
{
|
||
|
if (_pCrit)
|
||
|
::LeaveCriticalSection( _pCrit );
|
||
|
}
|
||
|
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// @mfunc
|
||
|
// Ends blocking explicitly. Thereafter, the destructor does nothing.
|
||
|
//-----------------------------------------------------------------------------------
|
||
|
|
||
|
inline void CAutoBlock::UnBlock()
|
||
|
{
|
||
|
// Clear the critical-section member,
|
||
|
// so that the destructor doesn't do anything.
|
||
|
|
||
|
if (_pCrit)
|
||
|
::LeaveCriticalSection( _pCrit );
|
||
|
_pCrit = NULL;
|
||
|
}
|
||
|
|
||
|
|
||
|
#endif //_CRSEMBED_H_
|