OLD | NEW |
1 // Copyright 2007 Igor Tandetnik | |
2 // | |
3 // Licensed under the Apache License, Version 2.0 (the "License"); | |
4 // you may not use this file except in compliance with the License. | |
5 // You may obtain a copy of the License at | |
6 // | |
7 // http://www.apache.org/licenses/LICENSE-2.0 | |
8 // | |
9 // Unless required by applicable law or agreed to in writing, software | |
10 // distributed under the License is distributed on an "AS IS" BASIS, | |
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
12 // See the License for the specific language governing permissions and | |
13 // limitations under the License. | |
14 | |
15 #ifndef PASSTHROUGHAPP_PROTOCOLCF_INL | 1 #ifndef PASSTHROUGHAPP_PROTOCOLCF_INL |
16 #define PASSTHROUGHAPP_PROTOCOLCF_INL | 2 #define PASSTHROUGHAPP_PROTOCOLCF_INL |
17 | 3 |
18 #if _MSC_VER > 1000 | 4 #if _MSC_VER > 1000 |
19 #pragma once | 5 #pragma once |
20 #endif // _MSC_VER > 1000 | 6 #endif // _MSC_VER > 1000 |
21 | 7 |
22 #ifndef PASSTHROUGHAPP_PROTOCOLCF_H | 8 #ifndef PASSTHROUGHAPP_PROTOCOLCF_H |
23 #error ProtocolCF.inl requires ProtocolCF.h to be included first | 9 » #error ProtocolCF.inl requires ProtocolCF.h to be included first |
24 #endif | 10 #endif |
25 | 11 |
26 #include "PassthroughObject.h" | 12 #include "PassthroughObject.h" |
27 | 13 |
28 | |
29 namespace PassthroughAPP | 14 namespace PassthroughAPP |
30 { | 15 { |
31 | 16 |
32 // ===== CComClassFactoryProtocol ===== | 17 // ===== CComClassFactoryProtocol ===== |
33 | 18 |
34 inline STDMETHODIMP CComClassFactoryProtocol::CreateInstance( | 19 inline STDMETHODIMP CComClassFactoryProtocol::CreateInstance( |
35 IUnknown* punkOuter, REFIID riid, void** ppvObj) | 20 IUnknown* punkOuter, REFIID riid, void** ppvObj) |
36 { | 21 { |
37 ATLASSERT(ppvObj != 0); | 22 ATLASSERT(ppvObj != 0); |
38 if (!ppvObj) | 23 if (!ppvObj) |
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
163 } | 148 } |
164 | 149 |
165 HRESULT hr = E_OUTOFMEMORY; | 150 HRESULT hr = E_OUTOFMEMORY; |
166 void* pv = static_cast<void*>(CreatorClass::CreateInstance); | 151 void* pv = static_cast<void*>(CreatorClass::CreateInstance); |
167 FactoryComObject* p = 0; | 152 FactoryComObject* p = 0; |
168 ATLTRY(p = new FactoryComObject(pv)) | 153 ATLTRY(p = new FactoryComObject(pv)) |
169 if (p != NULL) | 154 if (p != NULL) |
170 { | 155 { |
171 p->SetVoid(pv); | 156 p->SetVoid(pv); |
172 p->InternalFinalConstructAddRef(); | 157 p->InternalFinalConstructAddRef(); |
173 #if _ATL_VER >= 0x800 | 158 » » // MG: Updated to conform to more recent ATL version. |
174 hr = p->_AtlInitialConstruct(); | 159 hr = p->_AtlInitialConstruct(); |
175 if (SUCCEEDED(hr)) | 160 if (SUCCEEDED(hr)) |
176 #endif | |
177 hr = p->FinalConstruct(); | 161 hr = p->FinalConstruct(); |
178 #if _ATL_VER >= 0x800 | |
179 if (SUCCEEDED(hr)) | 162 if (SUCCEEDED(hr)) |
180 hr = p->_AtlFinalConstruct(); | 163 hr = p->_AtlFinalConstruct(); |
181 #endif | |
182 p->InternalFinalConstructRelease(); | 164 p->InternalFinalConstructRelease(); |
183 if (FAILED(hr)) | 165 if (FAILED(hr)) |
184 { | 166 { |
185 delete p; | 167 delete p; |
186 p = 0; | 168 p = 0; |
187 } | 169 } |
188 } | 170 } |
189 *ppObj = p; | 171 *ppObj = p; |
190 return hr; | 172 return hr; |
191 } | 173 } |
192 | 174 |
193 template <class Factory, class Protocol, class FactoryComObject> | 175 template <class Factory, class Protocol, class FactoryComObject> |
194 inline HRESULT CMetaFactory<Factory, Protocol, FactoryComObject>:: | 176 inline HRESULT CMetaFactory<Factory, Protocol, FactoryComObject>:: |
195 CreateInstance(IClassFactory* pTargetCF, IClassFactory** ppCF) | 177 CreateInstance(IClassFactory* pTargetCF, IClassFactory** ppCF) |
196 { | 178 { |
197 if (!ppCF) | 179 if (!ppCF) |
198 { | 180 { |
199 return E_POINTER; | 181 return E_POINTER; |
200 } | 182 } |
201 *ppCF = 0; | 183 *ppCF = 0; |
202 | 184 |
203 Factory* pObj = 0; | 185 Factory* pObj = 0; |
204 HRESULT hr = CreateInstance(&pObj); | 186 HRESULT hr = CreateInstance(&pObj); |
205 ATLASSERT(SUCCEEDED(hr) && pObj != 0); | 187 ATLASSERT(SUCCEEDED(hr) && pObj != 0); |
206 if (SUCCEEDED(hr)) | 188 if (SUCCEEDED(hr)) |
207 { | 189 { |
208 pObj->_AtlInitialConstruct(); | |
209 pObj->AddRef(); | 190 pObj->AddRef(); |
210 | 191 |
211 hr = pObj->SetTargetClassFactory(pTargetCF); | 192 hr = pObj->SetTargetClassFactory(pTargetCF); |
212 ATLASSERT(SUCCEEDED(hr)); | 193 ATLASSERT(SUCCEEDED(hr)); |
213 | 194 |
214 if (SUCCEEDED(hr)) | 195 if (SUCCEEDED(hr)) |
215 { | 196 { |
216 hr = pObj->QueryInterface(IID_IClassFactory, | 197 hr = pObj->QueryInterface(IID_IClassFactory, |
217 reinterpret_cast<void**>(ppCF)); | 198 reinterpret_cast<void**>(ppCF)); |
218 ATLASSERT(SUCCEEDED(hr) && *ppCF != 0); | 199 ATLASSERT(SUCCEEDED(hr) && *ppCF != 0); |
(...skipping 12 matching lines...) Expand all Loading... |
231 { | 212 { |
232 return E_POINTER; | 213 return E_POINTER; |
233 } | 214 } |
234 *ppCF = 0; | 215 *ppCF = 0; |
235 | 216 |
236 Factory* pObj = 0; | 217 Factory* pObj = 0; |
237 HRESULT hr = CreateInstance(&pObj); | 218 HRESULT hr = CreateInstance(&pObj); |
238 ATLASSERT(SUCCEEDED(hr) && pObj != 0); | 219 ATLASSERT(SUCCEEDED(hr) && pObj != 0); |
239 if (SUCCEEDED(hr)) | 220 if (SUCCEEDED(hr)) |
240 { | 221 { |
241 //pObj->_AtlInitialConstruct(); | |
242 pObj->AddRef(); | 222 pObj->AddRef(); |
243 | 223 |
244 hr = pObj->SetTargetCLSID(clsidTarget); | 224 hr = pObj->SetTargetCLSID(clsidTarget); |
245 ATLASSERT(SUCCEEDED(hr)); | 225 ATLASSERT(SUCCEEDED(hr)); |
246 | 226 |
247 if (SUCCEEDED(hr)) | 227 if (SUCCEEDED(hr)) |
248 { | 228 { |
249 hr = pObj->QueryInterface(IID_IClassFactory, | 229 hr = pObj->QueryInterface(IID_IClassFactory, |
250 reinterpret_cast<void**>(ppCF)); | 230 reinterpret_cast<void**>(ppCF)); |
251 ATLASSERT(SUCCEEDED(hr) && *ppCF != 0); | 231 ATLASSERT(SUCCEEDED(hr) && *ppCF != 0); |
252 } | 232 } |
253 | 233 |
254 pObj->Release(); | 234 pObj->Release(); |
255 } | 235 } |
256 return hr; | 236 return hr; |
257 } | 237 } |
258 | 238 |
259 } // end namespace PassthroughAPP | 239 } // end namespace PassthroughAPP |
260 | 240 |
261 #endif // PASSTHROUGHAPP_PROTOCOLCF_INL | 241 #endif // PASSTHROUGHAPP_PROTOCOLCF_INL |
OLD | NEW |