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 }