home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC Press 1997 July
/
Sezamfile97_2.iso
/
windows
/
program
/
activex
/
axtsamp.exe
/
TSBRANCH.EXE
/
DLLSERVE
/
FACTORY.H
< prev
next >
Wrap
C/C++ Source or Header
|
1996-12-29
|
15KB
|
404 lines
/*+==========================================================================
File: FACTORY.H
Summary: Include file for the class factory COM objects:
CFCar, CFUtilityCar, CFCruiseCar, and CFCarSample.
These constitute the DLLSERVE server's Class Factorys for
those COM components.
The multiple interface COM Object Classes are achieved via
the technique of nested classes: the implementation of the
IClassFactory interfaces are nested inside of the class
factory COM object classes.
For a comprehensive tutorial code tour of this module's
contents and offerings see the tutorial DLLSERVE.HTM file.
For more specific technical details on the internal workings
see the comments dispersed throughout the module's source code.
Classes: CFCar, CFUtilityCar, CFCruiseCar, CFCarSample.
Functions: .
Origin: 9-11-95: atrent - Editor-inheritance from CRUCAR.H in
the COMOBJ Tutorial Code Sample.
----------------------------------------------------------------------------
This file is part of the Microsoft ActiveX Tutorial Code Samples.
Copyright (C) Microsoft Corporation, 1997. All rights reserved.
This source code is intended only as a supplement to Microsoft
Development Tools and/or on-line documentation. See these other
materials for detailed information regarding Microsoft code samples.
THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
PARTICULAR PURPOSE.
==========================================================================+*/
#if !defined(FACTORY_H)
#define FACTORY_H
#ifdef __cplusplus
/*O+O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O
ObjectClass: CFCar
Summary: Class Factory COM Object Class for Car COM components.
Used to manufacture COCar COM objects. The mulitple
interfaces on this COM object class are constructed via
the nested interface classes technique.
Interfaces: IUnknown
Standard interface providing COM object features.
IClassFactory
Standard interface providing COM Class Factory features.
Aggregation: Yes, CFCar COM objects are aggregatable by
passing a non-NULL pUnkOuter IUnknown pointer into the
constructor.
O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O-O*/
class CFCar : public IUnknown
{
public:
// Main Object Constructor & Destructor.
CFCar(IUnknown* pUnkOuter, CServer* pServer);
~CFCar(void);
// IUnknown methods. Main object, non-delegating.
STDMETHODIMP QueryInterface(REFIID, PPVOID);
STDMETHODIMP_(ULONG) AddRef(void);
STDMETHODIMP_(ULONG) Release(void);
private:
// We declare nested class interface implementations here.
// We implement the IClassFactory interface (ofcourse) in this class
// factory COM object class.
class CImpIClassFactory : public IClassFactory
{
public:
// Interface Implementation Constructor & Destructor.
CImpIClassFactory(
CFCar* pBackObj,
IUnknown* pUnkOuter,
CServer* pServer);
~CImpIClassFactory(void);
// IUnknown methods.
STDMETHODIMP QueryInterface(REFIID, PPVOID);
STDMETHODIMP_(ULONG) AddRef(void);
STDMETHODIMP_(ULONG) Release(void);
// IClassFactory methods.
STDMETHODIMP CreateInstance(IUnknown*, REFIID, PPVOID);
STDMETHODIMP LockServer(BOOL);
private:
// Data private to this interface implementation of IClassFactory.
ULONG m_cRefI; // Interface Ref Count (for debugging).
CFCar* m_pBackObj; // Parent Object back pointer.
IUnknown* m_pUnkOuter; // Outer unknown for Delegation.
CServer* m_pServer; // Server's control object.
};
// Make the otherwise private and nested IClassFactory interface
// implementation a friend to COM object instantiations of this
// selfsame CFCar COM object class.
friend CImpIClassFactory;
// Private data of CFCar COM objects.
// Nested IClassFactory implementation instantiation.
CImpIClassFactory m_ImpIClassFactory;
// Main Object reference count.
ULONG m_cRefs;
// Outer unknown (aggregation & delegation). Used when this
// CFCar object is being aggregated. Otherwise it is used
// for delegation if this object is reused via containment.
IUnknown* m_pUnkOuter;
// Pointer to this component server's control object.
CServer* m_pServer;
};
typedef CFCar* PCFCar;
/*O+O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O
ObjectClass: CFUtilityCar
Summary: Class Factory COM Object Class for UtilityCar COM
components. Used to manufacture COUtilityCar COM
objects. The mulitple interfaces on this COM object
class are constructed via the nested interface
classes technique.
Interfaces: IUnknown
Standard interface providing COM object features.
IClassFactory
Standard interface providing COM Class Factory features.
Aggregation: Yes, CFUtilityCar COM objects are aggregatable by
passing a non-NULL pUnkOuter IUnknown pointer into the
constructor.
O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O-O*/
class CFUtilityCar : public IUnknown
{
public:
// Main Object Constructor & Destructor.
CFUtilityCar(IUnknown* pUnkOuter, CServer* pServer);
~CFUtilityCar(void);
// A general method for initializing a newly created CFUtilityCar.
HRESULT Init(void);
// IUnknown methods. Main object, non-delegating.
STDMETHODIMP QueryInterface(REFIID, PPVOID);
STDMETHODIMP_(ULONG) AddRef(void);
STDMETHODIMP_(ULONG) Release(void);
private:
// We declare nested class interface implementations here.
// We implement the IClassFactory interface (ofcourse) in this class
// factory COM object class.
class CImpIClassFactory : public IClassFactory
{
public:
// Interface Implementation Constructor & Destructor.
CImpIClassFactory(
CFUtilityCar* pBackObj,
IUnknown* pUnkOuter,
CServer* pServer);
~CImpIClassFactory(void);
// IUnknown methods.
STDMETHODIMP QueryInterface(REFIID, PPVOID);
STDMETHODIMP_(ULONG) AddRef(void);
STDMETHODIMP_(ULONG) Release(void);
// IClassFactory methods.
STDMETHODIMP CreateInstance(IUnknown*, REFIID, PPVOID);
STDMETHODIMP LockServer(BOOL);
private:
// Data private to this interface implementation of IClassFactory.
ULONG m_cRefI; // Interface Ref Count (debugging).
CFUtilityCar* m_pBackObj; // Parent Object back pointer.
IUnknown* m_pUnkOuter; // Outer unknown for Delegation.
CServer* m_pServer; // Server Control Object.
};
// Make the otherwise private and nested IClassFactory interface
// implementation a friend to COM object instantiations of this
// selfsame CFUtilityCar COM object class.
friend CImpIClassFactory;
// Private data of CFUtilityCar COM objects.
// Nested IClassFactory implementation instantiation.
CImpIClassFactory m_ImpIClassFactory;
// Main Object reference count.
ULONG m_cRefs;
// Outer unknown (aggregation & delegation). Used when this
// CFUtilityCar object is being aggregated. Otherwise it is used
// for delegation if this object is reused via containment.
IUnknown* m_pUnkOuter;
// Pointer to this component server's control object.
CServer* m_pServer;
};
typedef CFUtilityCar* PCFUtilityCar;
/*O+O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O
ObjectClass: CFCruiseCar
Summary: Class Factory COM Object Class for CruiseCar COM
components. Used to manufacture COCruiseCar COM objects.
The mulitple interfaces on this COM object class are
constructed via the nested interface classes technique.
Interfaces: IUnknown
Standard interface providing COM object features.
IClassFactory
Standard interface providing COM Class Factory features.
Aggregation: Yes, CFCruiseCar COM objects are aggregatable by
passing a non-NULL pUnkOuter IUnknown pointer into the
constructor.
O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O-O*/
class CFCruiseCar : public IUnknown
{
public:
// Main Object Constructor & Destructor.
CFCruiseCar(IUnknown* pUnkOuter, CServer* pServer);
~CFCruiseCar(void);
// A general method for initializing a newly created CFCruiseCar.
HRESULT Init(void);
// IUnknown methods. Main object, non-delegating.
STDMETHODIMP QueryInterface(REFIID, PPVOID);
STDMETHODIMP_(ULONG) AddRef(void);
STDMETHODIMP_(ULONG) Release(void);
private:
// We declare nested class interface implementations here.
// We implement the IClassFactory interface (ofcourse) in this class
// factory COM object class.
class CImpIClassFactory : public IClassFactory
{
public:
// Interface Implementation Constructor & Destructor.
CImpIClassFactory(
CFCruiseCar* pBackObj,
IUnknown* pUnkOuter,
CServer* pServer);
~CImpIClassFactory(void);
// IUnknown methods.
STDMETHODIMP QueryInterface(REFIID, PPVOID);
STDMETHODIMP_(ULONG) AddRef(void);
STDMETHODIMP_(ULONG) Release(void);
// IClassFactory methods.
STDMETHODIMP CreateInstance(IUnknown*, REFIID, PPVOID);
STDMETHODIMP LockServer(BOOL);
private:
// Data private to this interface implementation of IClassFactory.
ULONG m_cRefI; // Interface Ref Count (debugging).
CFCruiseCar* m_pBackObj; // Parent Object back pointer.
IUnknown* m_pUnkOuter; // Outer unknown for Delegation.
CServer* m_pServer; // Server Control Object.
};
// Make the otherwise private and nested IClassFactory interface
// implementation a friend to COM object instantiations of this
// selfsame CFCruiseCar COM object class.
friend CImpIClassFactory;
// Private data of CFCruiseCar COM objects.
// Nested IClassFactory implementation instantiation.
CImpIClassFactory m_ImpIClassFactory;
// Main Object reference count.
ULONG m_cRefs;
// Outer unknown (aggregation & delegation). Used when this
// CFCruiseCar object is being aggregated. Otherwise it is used
// for delegation if this object is reused via containment.
IUnknown* m_pUnkOuter;
// Pointer to this component server's control object.
CServer* m_pServer;
};
typedef CFCruiseCar* PCFCruiseCar;
/*O+O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O
ObjectClass: CFCarSample
Summary: Class Factory COM Object Class for CarSample COM
components. Used to manufacture COCarSample COM
objects. The mulitple interfaces on this COM object
class are constructed via the nested interface classes
technique.
Interfaces: IUnknown
Standard interface providing COM object features.
IClassFactory
Standard interface providing COM Class Factory features.
Aggregation: Yes, CFCarSample COM objects are aggregatable by
passing a non-NULL pUnkOuter IUnknown pointer into the
constructor.
O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O-O*/
class CFCarSample : public IUnknown
{
public:
// Main Object Constructor & Destructor.
CFCarSample(IUnknown* pUnkOuter, CServer* pServer);
~CFCarSample(void);
// A general method for initializing a newly created CFCarSample.
HRESULT Init(void);
// IUnknown methods. Main object, non-delegating.
STDMETHODIMP QueryInterface(REFIID, PPVOID);
STDMETHODIMP_(ULONG) AddRef(void);
STDMETHODIMP_(ULONG) Release(void);
private:
// We declare nested class interface implementations here.
// We implement the IClassFactory interface (ofcourse) in this Class
// Factory COM object class.
class CImpIClassFactory : public IClassFactory
{
public:
// Interface Implementation Constructor & Destructor.
CImpIClassFactory(
CFCarSample* pBackObj,
IUnknown* pUnkOuter,
CServer* pServer);
~CImpIClassFactory(void);
// IUnknown methods.
STDMETHODIMP QueryInterface(REFIID, PPVOID);
STDMETHODIMP_(ULONG) AddRef(void);
STDMETHODIMP_(ULONG) Release(void);
// IClassFactory methods.
STDMETHODIMP CreateInstance(IUnknown*, REFIID, PPVOID);
STDMETHODIMP LockServer(BOOL);
private:
// Data private to this interface implementation of IClassFactory.
ULONG m_cRefI; // Interface Ref Count (for debugging).
CFCarSample* m_pBackObj; // Parent Object back pointer.
IUnknown* m_pUnkOuter; // Outer unknown for Delegation.
CServer* m_pServer; // Server Control Object.
};
// Make the otherwise private and nested IClassFactory interface
// implementation a friend to COM object instantiations of this
// selfsame CFCarSample COM object class.
friend CImpIClassFactory;
// Private data of CFCarSample COM objects.
// Nested IClassFactory implementation instantiation.
CImpIClassFactory m_ImpIClassFactory;
// Main Object reference count.
ULONG m_cRefs;
// Outer unknown (aggregation & delegation). Used when this
// CFCarSample object is being aggregated. Otherwise it is used
// for delegation if this object is reused via containment.
IUnknown* m_pUnkOuter;
// Pointer to this component server's control object.
CServer* m_pServer;
};
typedef CFCarSample* PCFCarSample;
#endif // __cplusplus
#endif // FACTORY_H