Mercurial > hg > easyhg-kdiff3
annotate kdiff3/diff_ext_for_kdiff3/class_factory.cpp @ 113:7bca1f1340f6 tip
Build fixes for Xcode 10 / Qt 5.12
author | Chris Cannam |
---|---|
date | Mon, 17 Dec 2018 11:13:01 +0000 |
parents | 08ea9b86c12c |
children |
rev | line source |
---|---|
joachim99@75 | 1 /* |
joachim99@75 | 2 * Copyright (c) 2003, Sergey Zorin. All rights reserved. |
joachim99@75 | 3 * |
joachim99@75 | 4 * This software is distributable under the BSD license. See the terms |
joachim99@75 | 5 * of the BSD license in the LICENSE file provided with this software. |
joachim99@75 | 6 * |
joachim99@75 | 7 */ |
joachim99@75 | 8 |
joachim99@75 | 9 #include "class_factory.h" |
joachim99@75 | 10 #include "diff_ext.h" |
joachim99@75 | 11 #include "server.h" |
joachim99@75 | 12 |
joachim99@75 | 13 CLASS_FACTORY::CLASS_FACTORY() { |
joachim99@75 | 14 _ref_count = 0L; |
joachim99@75 | 15 |
joachim99@75 | 16 SERVER::instance()->lock(); |
joachim99@75 | 17 } |
joachim99@75 | 18 |
joachim99@75 | 19 CLASS_FACTORY::~CLASS_FACTORY() { |
joachim99@75 | 20 SERVER::instance()->release(); |
joachim99@75 | 21 } |
joachim99@75 | 22 |
joachim99@75 | 23 STDMETHODIMP |
joachim99@75 | 24 CLASS_FACTORY::QueryInterface(REFIID riid, void** ppv) { |
joachim99@75 | 25 HRESULT ret = E_NOINTERFACE; |
joachim99@75 | 26 *ppv = 0; |
joachim99@75 | 27 |
joachim99@75 | 28 if(IsEqualIID(riid, IID_IUnknown) || IsEqualIID(riid, IID_IClassFactory)) { |
joachim99@75 | 29 *ppv = static_cast<CLASS_FACTORY*>(this); |
joachim99@75 | 30 |
joachim99@75 | 31 AddRef(); |
joachim99@75 | 32 |
joachim99@75 | 33 ret = NOERROR; |
joachim99@75 | 34 } |
joachim99@75 | 35 |
joachim99@75 | 36 return ret; |
joachim99@75 | 37 } |
joachim99@75 | 38 |
joachim99@75 | 39 STDMETHODIMP_(ULONG) |
joachim99@75 | 40 CLASS_FACTORY::AddRef() { |
joachim99@75 | 41 return InterlockedIncrement((LPLONG)&_ref_count); |
joachim99@75 | 42 } |
joachim99@75 | 43 |
joachim99@75 | 44 STDMETHODIMP_(ULONG) |
joachim99@75 | 45 CLASS_FACTORY::Release() { |
joachim99@75 | 46 ULONG ret = 0L; |
joachim99@75 | 47 |
joachim99@75 | 48 if(InterlockedDecrement((LPLONG)&_ref_count) != 0) |
joachim99@75 | 49 ret = _ref_count; |
joachim99@75 | 50 else |
joachim99@75 | 51 delete this; |
joachim99@75 | 52 |
joachim99@75 | 53 return ret; |
joachim99@75 | 54 } |
joachim99@75 | 55 |
joachim99@75 | 56 STDMETHODIMP |
joachim99@75 | 57 CLASS_FACTORY::CreateInstance(IUnknown* outer, REFIID refiid, void** obj) { |
joachim99@75 | 58 HRESULT ret = CLASS_E_NOAGGREGATION; |
joachim99@75 | 59 *obj = 0; |
joachim99@75 | 60 |
joachim99@75 | 61 // Shell extensions typically don't support aggregation (inheritance) |
joachim99@75 | 62 if(outer == 0) { |
joachim99@75 | 63 DIFF_EXT* ext = new DIFF_EXT(); |
joachim99@75 | 64 |
joachim99@75 | 65 if(ext == 0) |
joachim99@75 | 66 ret = E_OUTOFMEMORY; |
joachim99@75 | 67 else |
joachim99@75 | 68 ret = ext->QueryInterface(refiid, obj); |
joachim99@75 | 69 } |
joachim99@75 | 70 |
joachim99@75 | 71 return ret; |
joachim99@75 | 72 } |
joachim99@75 | 73 |
joachim99@75 | 74 STDMETHODIMP |
joachim99@75 | 75 CLASS_FACTORY::LockServer(BOOL) { |
joachim99@75 | 76 return NOERROR; |
joachim99@75 | 77 } |