diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 17:32:43 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 17:32:43 +0000 |
commit | 6bf0a5cb5034a7e684dcc3500e841785237ce2dd (patch) | |
tree | a68f146d7fa01f0134297619fbe7e33db084e0aa /comm/mailnews/mapi/mapihook/src/msgMapiFactory.cpp | |
parent | Initial commit. (diff) | |
download | thunderbird-6bf0a5cb5034a7e684dcc3500e841785237ce2dd.tar.xz thunderbird-6bf0a5cb5034a7e684dcc3500e841785237ce2dd.zip |
Adding upstream version 1:115.7.0.upstream/1%115.7.0upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'comm/mailnews/mapi/mapihook/src/msgMapiFactory.cpp')
-rw-r--r-- | comm/mailnews/mapi/mapihook/src/msgMapiFactory.cpp | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/comm/mailnews/mapi/mapihook/src/msgMapiFactory.cpp b/comm/mailnews/mapi/mapihook/src/msgMapiFactory.cpp new file mode 100644 index 0000000000..cb99fc04fd --- /dev/null +++ b/comm/mailnews/mapi/mapihook/src/msgMapiFactory.cpp @@ -0,0 +1,64 @@ +/* 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/. */ + +#undef UNICODE +#undef _UNICODE + +#include "msgMapiFactory.h" +#include "msgMapiImp.h" +#include "msgMapi.h" + +CMapiFactory ::CMapiFactory() : m_cRef(1) {} + +CMapiFactory::~CMapiFactory() {} + +STDMETHODIMP CMapiFactory::QueryInterface(const IID& aIid, void** aPpv) { + if ((aIid == IID_IUnknown) || (aIid == IID_IClassFactory)) { + *aPpv = static_cast<IClassFactory*>(this); + } else { + *aPpv = nullptr; + return E_NOINTERFACE; + } + reinterpret_cast<IUnknown*>(*aPpv)->AddRef(); + return S_OK; +} + +STDMETHODIMP_(ULONG) CMapiFactory::AddRef() { return ++m_cRef; } + +STDMETHODIMP_(ULONG) CMapiFactory::Release() { + int32_t temp = --m_cRef; + if (m_cRef == 0) { + delete this; + return 0; + } + + return temp; +} + +STDMETHODIMP CMapiFactory::CreateInstance(IUnknown* aUnknownOuter, + const IID& aIid, void** aPpv) { + // Cannot aggregate. + + if (aUnknownOuter != nullptr) { + return CLASS_E_NOAGGREGATION; + } + + // Create component. + + CMapiImp* pImp = new CMapiImp(); + if (pImp == nullptr) { + return E_OUTOFMEMORY; + } + + // Get the requested interface. + HRESULT hr = pImp->QueryInterface(aIid, aPpv); + + // Release the IUnknown pointer. + // (If QueryInterface failed, component will delete itself.) + + pImp->Release(); + return hr; +} + +STDMETHODIMP CMapiFactory::LockServer(BOOL aLock) { return S_OK; } |