/////////////////////////////////////////////////////////////////////////////// // // 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 #include #include ////////// // '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 store; // DataStore where this object lives. CComPtr 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_