136 lines
4.3 KiB
C++
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_
|