21#include <servprov.hxx>
23#include <com/sun/star/lang/XMultiServiceFactory.hpp>
24#include <com/sun/star/uno/XComponentContext.hpp>
26#include <osl/diagnose.h>
27#include <osl/mutex.hxx>
28#include <osl/thread.h>
48 [[maybe_unused]]
static thread_local bool aInit = []
50 HRESULT
hr = CoInitializeEx(
nullptr, COINIT_MULTITHREADED);
53 assert(RPC_E_CHANGED_MODE ==
hr);
55 "CoInitializeEx fail: probably thread is in STA already?");
85 return "com.sun.star.comp.ole.EmbedServer";
95 return css::uno::Sequence<OUString>{
96 "com.sun.star.document.OleEmbeddedServerRegistration"};
118 hresult = CoRegisterClassObject(
125 return (hresult == NOERROR);
132 return (hresult == NOERROR);
137 if(IsEqualIID(riid, IID_IUnknown))
140 *ppv =
static_cast<IUnknown*
>(
static_cast<IClassFactory*
>(
this));
143 else if (IsEqualIID(riid, IID_IClassFactory))
146 *ppv =
static_cast<IClassFactory*
>(
this);
151 return ResultFromScode(E_NOINTERFACE);
154COM_DECLSPEC_NOTHROW
STDMETHODIMP_(ULONG) EmbedProviderFactory_Impl::AddRef()
159COM_DECLSPEC_NOTHROW
STDMETHODIMP_(ULONG) EmbedProviderFactory_Impl::Release()
161 ::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex());
172 REFIID riid,
void** ppv)
176 return pEmbedDocument->QueryInterface( riid, ppv );
185extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface*
187 css::uno::XComponentContext* context, css::uno::Sequence<css::uno::Any>
const& )
189 auto msf = uno::Reference<lang::XMultiServiceFactory>(context->getServiceManager(), css::uno::UNO_QUERY_THROW);
virtual ~EmbedProviderFactory_Impl()
STDMETHOD() QueryInterface(REFIID riid, LPVOID *ppvObj) override
oslInterlockedCount m_refCount
css::uno::Reference< css::lang::XMultiServiceFactory > m_xFactory
EmbedProviderFactory_Impl(const css::uno::Reference< css::lang::XMultiServiceFactory > &xFactory, const GUID *pGuid)
STDMETHOD() CreateInstance(IUnknown *punkOuter, REFIID riid, void **ppv) override
STDMETHOD() LockServer(int fLock) override
CComPtr< EmbedProviderFactory_Impl > m_pOLEFactories[SUPPORTED_FACTORIES_NUM]
OUString SAL_CALL getImplementationName() override
css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override
css::uno::Reference< css::lang::XMultiServiceFactory > m_xFactory
virtual ~EmbedServer_Impl() override
sal_Bool SAL_CALL supportsService(OUString const &ServiceName) override
EmbedServer_Impl(const css::uno::Reference< css::lang::XMultiServiceFactory > &xFactory)
#define SUPPORTED_FACTORIES_NUM
const GUID DECLSPEC_SELECTANY OID_PresentationServer
const GUID DECLSPEC_SELECTANY OID_MathServer
const GUID DECLSPEC_SELECTANY OID_DrawingServer
const GUID DECLSPEC_SELECTANY OID_CalcServer
const GUID DECLSPEC_SELECTANY OID_MathOASISServer
const GUID DECLSPEC_SELECTANY OID_WriterTextServer
const GUID DECLSPEC_SELECTANY OID_WriterOASISTextServer
const GUID DECLSPEC_SELECTANY OID_CalcOASISServer
const GUID DECLSPEC_SELECTANY OID_DrawingOASISServer
const GUID DECLSPEC_SELECTANY OID_PresentationOASISServer
Reference< XSingleServiceFactory > xFactory
#define SAL_INFO(area, stream)
bool CPPUHELPER_DLLPUBLIC supportsService(css::lang::XServiceInfo *implementation, rtl::OUString const &name)
static void o2u_attachCurrentThread()
SAL_DLLPUBLIC_EXPORT css::uno::XInterface * embedserv_EmbedServer(css::uno::XComponentContext *context, css::uno::Sequence< css::uno::Any > const &)
const GUID *const guidList[SUPPORTED_FACTORIES_NUM]
COM_DECLSPEC_NOTHROW STDMETHODIMP_(ULONG) EmbedProviderFactory_Impl