windows-nt/Source/XPSP1/NT/net/ias/iasjet/dstore/dsobject.h
2020-09-26 16:20:57 +08:00

136 lines
4.3 KiB
C++

///////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 1998, Microsoft Corp. All rights reserved.
//
// FILE
//
// dsobject.h
//
// SYNOPSIS
//
// This file declares the class DBObject.
//
// MODIFICATION HISTORY
//
// 02/20/1998 Original version.
// 10/02/1998 Allow rename through PutValue.
// 04/13/2000 Port to ATL 3.0
//
///////////////////////////////////////////////////////////////////////////////
#ifndef _DSOBJECT_H_
#define _DSOBJECT_H_
#include <dsproperty.h>
#include <dstorex.h>
#include <propbag.h>
//////////
// 'Secret' UUID used to cast an interface to the implementing DBObject.
//////////
class __declspec(uuid("7677647C-AA27-11D1-BB27-00C04FC2E20D")) DBObject;
///////////////////////////////////////////////////////////////////////////////
//
// CLASS
//
// DBObject
//
// DESCRIPTION
//
// This class implements an object in an OLE-DB database. All objects
// are also containers.
//
///////////////////////////////////////////////////////////////////////////////
class DBObject
: public CComObjectRootEx< CComMultiThreadModel >,
public IDispatchImpl< IDataStoreObjectEx,
&__uuidof(IDataStoreObject),
&__uuidof(DataStore2Lib) >,
public IDispatchImpl< IDataStoreContainerEx,
&__uuidof(IDataStoreContainer),
&__uuidof(DataStore2Lib) >
{
public:
DECLARE_NO_REGISTRY()
BEGIN_COM_MAP(DBObject)
COM_INTERFACE_ENTRY_IID(__uuidof(DBObject), DBObject)
COM_INTERFACE_ENTRY_IID(__uuidof(IDataStoreObject), IDataStoreObject)
COM_INTERFACE_ENTRY_IID(__uuidof(IDataStoreContainer), IDataStoreContainer)
COM_INTERFACE_ENTRY2(IDispatch, IDataStoreObject)
END_COM_MAP()
// Create a new DBObject
static DBObject* createInstance(
OleDBDataStore* owner,
IDataStoreContainer* container,
ULONG uniqueID,
PCWSTR relativeName
);
// Create a child DBObject.
IDataStoreObject* spawn(ULONG childID, BSTR childName);
//////////
// IDataStoreObject
//////////
STDMETHOD(get_Name)(/*[out, retval]*/ BSTR* pVal);
STDMETHOD(get_Class)(/*[out, retval]*/ BSTR* pVal);
STDMETHOD(get_GUID)(/*[out, retval]*/ BSTR* pVal);
STDMETHOD(get_Container)(/*[out, retval]*/ IDataStoreContainer** pVal);
STDMETHOD(GetValue)(/*[in]*/ BSTR bstrName, /*[out, retval]*/ VARIANT* pVal);
STDMETHOD(GetValueEx)(/*[in]*/ BSTR bstrName,
/*[out, retval]*/ VARIANT* pVal);
STDMETHOD(PutValue)(/*[in]*/ BSTR bstrName, /*[in]*/ VARIANT* pVal);
STDMETHOD(Update)();
STDMETHOD(Restore)();
STDMETHOD(Item)(BSTR bstrName, IDataStoreProperty** pVal);
//////////
// IDataStoreObjectEx
//////////
STDMETHOD(get_PropertyCount)(long* pVal);
STDMETHOD(get_NewPropertyEnum)(IUnknown** pVal);
//////////
// IDataStoreContainer
//////////
STDMETHOD(Item)(/*[in]*/ BSTR bstrName,
/*[out, retval]*/ IDataStoreObject** ppObject);
STDMETHOD(Create)(/*[in]*/ BSTR bstrClass,
/*[in]*/ BSTR bstrName,
/*[out, retval]*/ IDataStoreObject** ppObject);
STDMETHOD(MoveHere)(/*[in]*/ IDataStoreObject* pObject,
/*[in]*/ BSTR bstrNewName);
STDMETHOD(Remove)(/*[in]*/ BSTR bstrClass, /*[in]*/ BSTR bstrName);
//////////
// IDataStoreContainerEx
//////////
STDMETHOD(get_ChildCount)(/*[out, retval]*/ long *pVal);
STDMETHOD(get_NewChildEnum)(/*[out, retval]*/ IUnknown** pVal);
protected:
// Initialize a newly allocated DBObject. Used by createInstance.
void initialize(
OleDBDataStore* owner,
IDataStoreContainer* container,
ULONG uniqueID,
PCWSTR relativeName
);
// Narrows a COM Interface to the implementing DBObject.
static DBObject* narrow(IUnknown* p);
CComPtr<OleDBDataStore> store; // DataStore where this object lives.
CComPtr<IDataStoreContainer> parent; // Parent container.
ULONG identity; // Unique identity.
_bstr_t name; // Relative name of this object.
bool nameDirty; // true if the object has been renamed.
PropertyBag properties; // Bag of associated properties.
};
#endif // _DSOBJECT_H_