source: trunk/src/ole32/new/apartment.h@ 3670

Last change on this file since 3670 was 3456, checked in by davidr, 26 years ago

OLE32/NEW: Work-in-progress on adding apartment handling

File size: 3.5 KB
Line 
1/* $Id: apartment.h,v 1.1 2000-04-27 22:21:35 davidr Exp $ */
2/*
3 *
4 * Project Odin Software License can be found in LICENSE.TXT
5 *
6 */
7
8#ifndef APARTMENT_INCLUDED
9#define APARTMENT_INCLUDED 1
10
11class Apartment;
12
13class ObjectContext;
14
15// ----------------------------------------------------------------------
16//
17// ----------------------------------------------------------------------
18enum enAptType
19{
20 APT_TN = 0,
21 APT_MT = 1,
22 APT_ST = 2,
23 APT_MAIN = 3,
24 APT_HOST = 4
25};
26
27enum enThreadingModel
28{
29 THM_UNDEFINED = 0,
30 THM_APARTMENT,
31 THM_FREE,
32 THM_BOTH,
33 THM_NEUTRAL
34};
35
36// ----------------------------------------------------------------------
37// Attributes associated with an object...
38// ----------------------------------------------------------------------
39class Attributes
40{
41public:
42 enThreadingModel GetThreadingModel(void ) const
43 { return m_ThreadingModel; }
44
45 BOOL GetConfiguredComponent(void ) const
46 { return m_fConfiguredComponent; }
47
48protected:
49
50private:
51 enThreadingModel m_ThreadingModel;
52 BOOL m_fConfiguredComponent;
53
54 // Loads more stuff to do with COM+ object context to go here :-)
55
56};
57
58// ----------------------------------------------------------------------
59// COntext in which an object runs...
60// ----------------------------------------------------------------------
61class ObjectContext
62{
63private:
64 GUID m_Guid;
65 Apartment * m_pApt;
66
67 // Loads more stuff to do with COM+ object context to go here :-)
68
69protected:
70
71public:
72
73 ObjectContext();
74
75 const GUID & GetGUID(void ) const // Object context GUID...
76 { return m_Guid; }
77
78 const Apartment * GetApt(void ) const // Associated apartment...
79 { return m_pApt; }
80
81 void SetApt(Apartment * const pApt)
82 { m_pApt = pApt; }
83
84 // Longhand methods...
85 BOOL IsCompatible(Attributes * const pTarget) const;
86};
87
88// ----------------------------------------------------------------------
89// Class to represent an apartment.
90// Apartments have varing thread affinity dependant on their type.
91// ----------------------------------------------------------------------
92class Apartment
93{
94private:
95 GUID m_Guid;
96 ObjectContext * m_pDefaultContext;
97 HWND m_hwndPump;
98 enAptType m_AptType;
99
100protected:
101
102public:
103
104 Apartment(enAptType aptType);
105 virtual ~Apartment();
106
107 enAptType GetAptType(void ) const
108 { return m_AptType; }
109
110 const GUID & GetGUID(void ) const
111 { return m_Guid; }
112
113 ObjectContext * const GetDefaultContext(void ) const
114 { return m_pDefaultContext; }
115
116 BOOL IsMessageBased(void ) const
117 { return !((m_AptType == APT_MT) || (m_AptType == APT_TN)); }
118
119 // Longhand methods...
120 BOOL IsCompatible(Attributes * const pTarget) const;
121};
122
123// ----------------------------------------------------------------------
124// Info stored against each thread by COM
125// ----------------------------------------------------------------------
126class ThreadInfo
127{
128private:
129 LONG m_RefCount;
130
131 Apartment * m_pAptHome;
132 ObjectContext * m_pCurContext;
133
134protected:
135public:
136 ThreadInfo() : m_RefCount(1), m_pAptHome(0), m_pCurContext(0)
137 {};
138
139 virtual ~ThreadInfo()
140 { delete m_pAptHome; }
141
142 LONG AddRef(void )
143 { return ++m_RefCount; }
144
145 LONG Release(void )
146 { return --m_RefCount; }
147
148 Apartment * GetHomeApt(void )
149 { return m_pAptHome; }
150
151 void SetHomeApt(Apartment * pApt)
152 { m_pAptHome = pApt; }
153
154 ObjectContext * GetCurContext(void )
155 { return m_pCurContext; }
156
157 void SetCurContext(ObjectContext * curContext)
158 { m_pCurContext = curContext; }
159
160};
161
162
163#endif /* APARTMENT_INCLUDED */
Note: See TracBrowser for help on using the repository browser.