1
0
Fork 0
libreoffice/shell/source/win32/spsupp/spsuppClassFactory.cxx
Daniel Baumann 8e63e14cf6
Adding upstream version 4:25.2.3.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
2025-06-22 16:20:04 +02:00

81 lines
1.7 KiB
C++

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
#include <spsuppClassFactory.hpp>
#include <COMOpenDocuments.hpp>
LONG ClassFactory::m_nObjCount = 0;
LONG ClassFactory::m_nLockCount = 0;
ClassFactory::ClassFactory()
{
::InterlockedIncrement(&m_nObjCount);
};
ClassFactory::~ClassFactory()
{
::InterlockedDecrement(&m_nObjCount);
};
// IUnknown methods
STDMETHODIMP ClassFactory::QueryInterface(
REFIID riid,
void **ppvObject)
{
*ppvObject = nullptr;
if (IsEqualIID(riid, __uuidof(IUnknown)) ||
IsEqualIID(riid, __uuidof(IClassFactory)))
{
*ppvObject = static_cast<IClassFactory*>(this);
AddRef();
return S_OK;
}
return E_NOINTERFACE;
}
// IClassFactory methods
STDMETHODIMP ClassFactory::CreateInstance(
IUnknown *pUnkOuter,
REFIID riid,
void **ppvObject)
{
*ppvObject = nullptr;
if (pUnkOuter)
{
return CLASS_E_NOAGGREGATION;
}
COMOpenDocuments* pObj;
try {
pObj = new COMOpenDocuments;
}
catch (const COMOpenDocuments::Error& e) {
return e.val();
}
catch (...) {
return E_OUTOFMEMORY;
}
HRESULT hr = pObj->QueryInterface(riid, ppvObject);
pObj->Release();
return hr;
}
STDMETHODIMP ClassFactory::LockServer(BOOL fLock)
{
if (fLock)
::InterlockedIncrement(&m_nLockCount);
else
::InterlockedDecrement(&m_nLockCount);
return S_OK;
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */