xref: /aoo41x/main/sd/source/ui/unoidl/facreg.cxx (revision 02c50d82)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_sd.hxx"
26 #include <com/sun/star/registry/XRegistryKey.hpp>
27 
28 #include "sddll.hxx"
29 
30 #include <cppuhelper/factory.hxx>
31 #include <uno/lbnames.h>
32 #include <sfx2/sfxmodelfactory.hxx>
33 #include "osl/diagnose.h"
34 #include "sal/types.h"
35 
36 #ifndef INCLUDED_STRING_H
37 #include <string.h>
38 #define INCLUDED_STRING_H
39 #endif
40 #include <comphelper/stl_types.hxx>
41 #include <hash_map>
42 #include <boost/shared_ptr.hpp>
43 
44 using namespace rtl;
45 using namespace com::sun::star;
46 
47 
48 // Forward declarations of the factories.
49 
50 extern uno::Reference< uno::XInterface > SAL_CALL SdDrawingDocument_createInstance( const uno::Reference< lang::XMultiServiceFactory > & _rxFactory, const sal_uInt64 _nCreationFlags );
51 extern OUString SdDrawingDocument_getImplementationName() throw( uno::RuntimeException );
52 extern uno::Sequence< OUString > SAL_CALL SdDrawingDocument_getSupportedServiceNames() throw( uno::RuntimeException );
53 
54 extern uno::Reference< uno::XInterface > SAL_CALL SdPresentationDocument_createInstance( const uno::Reference< lang::XMultiServiceFactory > & _rxFactory, const sal_uInt64 _nCreationFlags );
55 extern OUString SdPresentationDocument_getImplementationName() throw( uno::RuntimeException );
56 extern uno::Sequence< OUString > SAL_CALL SdPresentationDocument_getSupportedServiceNames() throw( uno::RuntimeException );
57 
58 extern uno::Reference< uno::XInterface > SAL_CALL SdHtmlOptionsDialog_CreateInstance( const uno::Reference< lang::XMultiServiceFactory > & _rxFactory );
59 extern OUString SdHtmlOptionsDialog_getImplementationName() throw( uno::RuntimeException );
60 extern uno::Sequence< OUString > SAL_CALL SdHtmlOptionsDialog_getSupportedServiceNames() throw( uno::RuntimeException );
61 
62 extern uno::Reference< uno::XInterface > SAL_CALL SdUnoModule_createInstance( const uno::Reference< lang::XMultiServiceFactory > & _rxFactory );
63 extern OUString SdUnoModule_getImplementationName() throw( uno::RuntimeException );
64 extern uno::Sequence< OUString > SAL_CALL SdUnoModule_getSupportedServiceNames() throw( uno::RuntimeException );
65 
66 namespace sd
67 {
68 extern uno::Reference< uno::XInterface > SAL_CALL RandomNode_createInstance( const uno::Reference< lang::XMultiServiceFactory > & _rxFactory );
69 extern OUString RandomNode__getImplementationName() throw( uno::RuntimeException );
70 extern uno::Sequence< OUString > SAL_CALL RandomNode_getSupportedServiceNames() throw( uno::RuntimeException );
71 
72 extern uno::Reference< uno::XInterface > SAL_CALL SlideLayoutController_createInstance( const uno::Reference< lang::XMultiServiceFactory > & _rxFactory );
73 extern OUString SlideLayoutController_getImplementationName() throw( uno::RuntimeException );
74 extern uno::Sequence< OUString >  SlideLayoutController_getSupportedServiceNames() throw( uno::RuntimeException );
75 
76 extern uno::Reference< uno::XInterface > SAL_CALL InsertSlideController_createInstance( const uno::Reference< lang::XMultiServiceFactory > & _rxFactory );
77 extern OUString InsertSlideController_getImplementationName() throw( uno::RuntimeException );
78 extern uno::Sequence< OUString >  InsertSlideController_getSupportedServiceNames() throw( uno::RuntimeException );
79 }
80 
81 namespace sd { namespace framework {
82 
83 extern uno::Reference<uno::XInterface> SAL_CALL Configuration_createInstance(
84     const uno::Reference<uno::XComponentContext>& rxContext)
85     throw(uno::Exception);
86 extern OUString Configuration_getImplementationName(void) throw (uno::RuntimeException);
87 extern uno::Sequence<OUString> SAL_CALL Configuration_getSupportedServiceNames (void)
88     throw (uno::RuntimeException);
89 
90 extern uno::Reference<uno::XInterface> SAL_CALL ConfigurationController_createInstance(
91     const uno::Reference<uno::XComponentContext>& rxContext)
92     throw(uno::Exception);
93 extern OUString ConfigurationController_getImplementationName(void) throw (uno::RuntimeException);
94 extern uno::Sequence<OUString> SAL_CALL ConfigurationController_getSupportedServiceNames (void)
95     throw (uno::RuntimeException);
96 
97 extern uno::Reference<uno::XInterface> SAL_CALL ModuleController_createInstance(
98     const uno::Reference<uno::XComponentContext>& rxContext)
99     throw(uno::Exception);
100 extern OUString ModuleController_getImplementationName(void) throw (uno::RuntimeException);
101 extern uno::Sequence<OUString> SAL_CALL ModuleController_getSupportedServiceNames (void)
102     throw (uno::RuntimeException);
103 
104 extern uno::Reference<uno::XInterface> SAL_CALL BasicPaneFactory_createInstance(
105     const uno::Reference<uno::XComponentContext>& rxContext)
106     throw(uno::Exception);
107 extern OUString BasicPaneFactory_getImplementationName(void) throw (uno::RuntimeException);
108 extern uno::Sequence<OUString> SAL_CALL BasicPaneFactory_getSupportedServiceNames (void)
109     throw (uno::RuntimeException);
110 
111 extern uno::Reference<uno::XInterface> SAL_CALL BasicToolBarFactory_createInstance(
112     const uno::Reference<uno::XComponentContext>& rxContext)
113     throw(uno::Exception);
114 extern OUString BasicToolBarFactory_getImplementationName(void) throw (uno::RuntimeException);
115 extern uno::Sequence<OUString> SAL_CALL BasicToolBarFactory_getSupportedServiceNames (void)
116     throw (uno::RuntimeException);
117 
118 extern uno::Reference<uno::XInterface> SAL_CALL BasicViewFactory_createInstance(
119     const uno::Reference<uno::XComponentContext>& rxContext)
120     throw(uno::Exception);
121 extern OUString BasicViewFactory_getImplementationName(void) throw (uno::RuntimeException);
122 extern uno::Sequence<OUString> SAL_CALL BasicViewFactory_getSupportedServiceNames (void)
123     throw (uno::RuntimeException);
124 
125 extern uno::Reference<uno::XInterface> SAL_CALL ResourceId_createInstance(
126     const uno::Reference<uno::XComponentContext>& rxContext)
127     throw(uno::Exception);
128 extern OUString ResourceId_getImplementationName(void) throw (uno::RuntimeException);
129 extern uno::Sequence<OUString> SAL_CALL ResourceId_getSupportedServiceNames (void)
130     throw (uno::RuntimeException);
131 
132 extern uno::Reference<uno::XInterface> SAL_CALL PresentationFactoryProvider_createInstance(
133     const uno::Reference<uno::XComponentContext>& rxContext)
134     throw(uno::Exception);
135 extern OUString PresentationFactoryProvider_getImplementationName(void)
136     throw (uno::RuntimeException);
137 extern uno::Sequence<OUString> SAL_CALL PresentationFactoryProvider_getSupportedServiceNames (void)
138     throw (uno::RuntimeException);
139 } }
140 
141 namespace sd { namespace sidebar {
142 
143 extern uno::Reference<uno::XInterface> SAL_CALL SidebarFactory_createInstance(
144     const uno::Reference<uno::XComponentContext>& rxContext)
145     throw(uno::Exception);
146 extern OUString SidebarFactory_getImplementationName(void) throw (uno::RuntimeException);
147 extern uno::Sequence<OUString> SAL_CALL SidebarFactory_getSupportedServiceNames (void)
148     throw (uno::RuntimeException);
149 
150 } }
151 
152 namespace sd { namespace presenter {
153 extern uno::Reference<uno::XInterface> SAL_CALL SlideRenderer_createInstance(
154     const uno::Reference<uno::XComponentContext>& rxContext)
155     throw(uno::Exception);
156 extern OUString SlideRenderer_getImplementationName(void)
157     throw (uno::RuntimeException);
158 extern uno::Sequence<OUString> SAL_CALL SlideRenderer_getSupportedServiceNames (void)
159     throw (uno::RuntimeException);
160 
161 extern uno::Reference<uno::XInterface> SAL_CALL PresenterCanvas_createInstance(
162     const uno::Reference<uno::XComponentContext>& rxContext)
163     throw(uno::Exception);
164 extern OUString PresenterCanvas_getImplementationName(void)
165     throw (uno::RuntimeException);
166 extern uno::Sequence<OUString> SAL_CALL PresenterCanvas_getSupportedServiceNames (void)
167     throw (uno::RuntimeException);
168 
169 extern uno::Reference<uno::XInterface> SAL_CALL PresenterTextViewService_createInstance(
170     const uno::Reference<uno::XComponentContext>& rxContext)
171     throw(uno::Exception);
172 extern OUString PresenterTextViewService_getImplementationName(void)
173     throw (uno::RuntimeException);
174 extern uno::Sequence<OUString> SAL_CALL PresenterTextViewService_getSupportedServiceNames (void)
175     throw (uno::RuntimeException);
176 
177 extern uno::Reference<uno::XInterface> SAL_CALL PresenterHelperService_createInstance(
178     const uno::Reference<uno::XComponentContext>& rxContext)
179     throw(uno::Exception);
180 extern OUString PresenterHelperService_getImplementationName(void)
181     throw (uno::RuntimeException);
182 extern uno::Sequence<OUString> SAL_CALL PresenterHelperService_getSupportedServiceNames (void)
183     throw (uno::RuntimeException);
184 
185 extern uno::Reference<uno::XInterface> SAL_CALL PresenterPreviewCache_createInstance(
186     const uno::Reference<uno::XComponentContext>& rxContext)
187     throw(uno::Exception);
188 extern OUString PresenterPreviewCache_getImplementationName(void)
189     throw (uno::RuntimeException);
190 extern uno::Sequence<OUString> SAL_CALL PresenterPreviewCache_getSupportedServiceNames (void)
191     throw (uno::RuntimeException);
192 } }
193 
194 
195 namespace sd { namespace slidesorter {
196 extern uno::Reference<uno::XInterface> SAL_CALL SlideSorterService_createInstance(
197     const uno::Reference<uno::XComponentContext>& rxContext)
198     throw(uno::Exception);
199 extern OUString SlideSorterService_getImplementationName(void)
200     throw (uno::RuntimeException);
201 extern uno::Sequence<OUString> SAL_CALL SlideSorterService_getSupportedServiceNames (void)
202     throw (uno::RuntimeException);
203 } }
204 
205 using namespace ::sd;
206 using namespace ::sd::framework;
207 using namespace ::sd::presenter;
208 using namespace ::sd::slidesorter;
209 using namespace ::sd::sidebar;
210 
211 
212 
213 
214 // ----------------------------------------------------------------------------
215 // Declaration and initialization of a map from service names to locally
216 // unique factory identifiers.
217 
218 enum FactoryId
219 {
220     SdDrawingDocumentFactoryId,
221     SdPresentationDocumentFactoryId,
222     SdHtmlOptionsDialogFactoryId,
223     SdUnoModuleFactoryId,
224     RandomNodeFactoryId,
225 
226     ConfigurationFactoryId,
227     ConfigurationControllerFactoryId,
228     ModuleControllerFactoryId,
229     BasicPaneFactoryFactoryId,
230     BasicToolBarFactoryFactoryId,
231     BasicViewFactoryFactoryId,
232     SidebarFactoryFactoryId,
233     ResourceIdFactoryId,
234     PresentationFactoryProviderFactoryId,
235     SlideRendererFactoryId,
236     PresenterCanvasFactoryId,
237     PresenterTextViewServiceFactoryId,
238     PresenterHelperServiceFactoryId,
239     PresenterPreviewCacheFactoryId,
240     SlideSorterServiceFactoryId,
241 	SlideLayoutControllerFactoryId,
242 	InsertSlideControllerFactoryId,
243 };
244 typedef ::std::hash_map<OUString, FactoryId, comphelper::UStringHash, comphelper::UStringEqual> FactoryMap;
245 
246 
247 namespace {
248 static ::boost::shared_ptr<FactoryMap> spFactoryMap;
249 ::boost::shared_ptr<FactoryMap> GetFactoryMap (void)
250 {
251     if (spFactoryMap.get() == NULL)
252     {
253         spFactoryMap.reset(new FactoryMap);
254         (*spFactoryMap)[SdDrawingDocument_getImplementationName()] = SdDrawingDocumentFactoryId;
255         (*spFactoryMap)[SdPresentationDocument_getImplementationName()] = SdPresentationDocumentFactoryId;
256         (*spFactoryMap)[SdHtmlOptionsDialog_getImplementationName()] = SdHtmlOptionsDialogFactoryId;
257         (*spFactoryMap)[SdUnoModule_getImplementationName()] = SdUnoModuleFactoryId;
258         (*spFactoryMap)[RandomNode__getImplementationName()] = RandomNodeFactoryId;
259         (*spFactoryMap)[Configuration_getImplementationName()] = ConfigurationFactoryId;
260         (*spFactoryMap)[ConfigurationController_getImplementationName()] = ConfigurationControllerFactoryId;
261         (*spFactoryMap)[ModuleController_getImplementationName()] = ModuleControllerFactoryId;
262         (*spFactoryMap)[BasicPaneFactory_getImplementationName()] = BasicPaneFactoryFactoryId;
263         (*spFactoryMap)[BasicToolBarFactory_getImplementationName()] = BasicToolBarFactoryFactoryId;
264         (*spFactoryMap)[BasicViewFactory_getImplementationName()] = BasicViewFactoryFactoryId;
265         (*spFactoryMap)[sidebar::SidebarFactory_getImplementationName()] = SidebarFactoryFactoryId;
266         (*spFactoryMap)[ResourceId_getImplementationName()] = ResourceIdFactoryId;
267         (*spFactoryMap)[PresentationFactoryProvider_getImplementationName()] = PresentationFactoryProviderFactoryId;
268         (*spFactoryMap)[SlideRenderer_getImplementationName()] = SlideRendererFactoryId;
269         (*spFactoryMap)[PresenterCanvas_getImplementationName()] = PresenterCanvasFactoryId;
270         (*spFactoryMap)[PresenterTextViewService_getImplementationName()] = PresenterTextViewServiceFactoryId;
271         (*spFactoryMap)[PresenterHelperService_getImplementationName()] = PresenterHelperServiceFactoryId;
272         (*spFactoryMap)[PresenterPreviewCache_getImplementationName()] = PresenterPreviewCacheFactoryId;
273         (*spFactoryMap)[SlideSorterService_getImplementationName()] = SlideSorterServiceFactoryId;
274 		(*spFactoryMap)[SlideLayoutController_getImplementationName()] = SlideLayoutControllerFactoryId;
275 		(*spFactoryMap)[InsertSlideController_getImplementationName()] = InsertSlideControllerFactoryId;
276     }
277     return spFactoryMap;
278 };
279 } // end of anonymous namespace
280 
281 
282 extern "C"
283 {
284 
285 SAL_DLLPUBLIC_EXPORT void SAL_CALL component_getImplementationEnvironment(
286 	const sal_Char  ** ppEnvTypeName,
287 	uno_Environment **  )
288 {
289 	*ppEnvTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME;
290 }
291 
292 SAL_DLLPUBLIC_EXPORT void * SAL_CALL component_getFactory(
293 	const sal_Char * pImplName,
294 	void           * pServiceManager,
295 	void           *  )
296 {
297     void * pRet = 0;
298 
299 	if( pServiceManager )
300 	{
301 		uno::Reference< lang::XMultiServiceFactory > xMSF( reinterpret_cast< lang::XMultiServiceFactory * >( pServiceManager ) );
302 
303 		uno::Reference<lang::XSingleServiceFactory> xFactory;
304         uno::Reference<lang::XSingleComponentFactory> xComponentFactory;
305 
306         ::boost::shared_ptr<FactoryMap> pFactoryMap (GetFactoryMap());
307         OUString sImplementationName (OUString::createFromAscii(pImplName));
308         FactoryMap::const_iterator iFactory (pFactoryMap->find(sImplementationName));
309         if (iFactory != pFactoryMap->end())
310         {
311             switch (iFactory->second)
312             {
313                 case SdHtmlOptionsDialogFactoryId:
314                     xFactory = ::cppu::createSingleFactory(
315                         xMSF,
316                         SdHtmlOptionsDialog_getImplementationName(),
317                         SdHtmlOptionsDialog_CreateInstance,
318                         SdHtmlOptionsDialog_getSupportedServiceNames());
319                     break;
320 
321                 case SdDrawingDocumentFactoryId:
322                     xFactory = ::sfx2::createSfxModelFactory(
323                         xMSF,
324                         SdDrawingDocument_getImplementationName(),
325                         SdDrawingDocument_createInstance,
326                         SdDrawingDocument_getSupportedServiceNames());
327                     break;
328 
329                 case SdPresentationDocumentFactoryId:
330                     xFactory = ::sfx2::createSfxModelFactory(
331                         xMSF,
332                         SdPresentationDocument_getImplementationName(),
333                         SdPresentationDocument_createInstance,
334                         SdPresentationDocument_getSupportedServiceNames());
335                     break;
336 
337                 case SdUnoModuleFactoryId:
338                     xFactory = ::cppu::createSingleFactory(
339                         xMSF,
340                         SdUnoModule_getImplementationName(),
341                         SdUnoModule_createInstance,
342                         SdUnoModule_getSupportedServiceNames());
343                     break;
344 
345                 case RandomNodeFactoryId:
346                     xFactory = ::cppu::createSingleFactory(
347                         xMSF,
348                         sd::RandomNode__getImplementationName(),
349                         sd::RandomNode_createInstance,
350                         sd::RandomNode_getSupportedServiceNames());
351                     break;
352 
353                 case ConfigurationFactoryId:
354                     xComponentFactory = ::cppu::createSingleComponentFactory(
355                         sd::framework::Configuration_createInstance,
356                         sd::framework::Configuration_getImplementationName(),
357                         sd::framework::Configuration_getSupportedServiceNames());
358                     break;
359 
360                 case ConfigurationControllerFactoryId:
361                     xComponentFactory = ::cppu::createSingleComponentFactory(
362                         sd::framework::ConfigurationController_createInstance,
363                         sd::framework::ConfigurationController_getImplementationName(),
364                         sd::framework::ConfigurationController_getSupportedServiceNames());
365                     break;
366 
367                 case ModuleControllerFactoryId:
368                     xComponentFactory = ::cppu::createSingleComponentFactory(
369                         sd::framework::ModuleController_createInstance,
370                         sd::framework::ModuleController_getImplementationName(),
371                         sd::framework::ModuleController_getSupportedServiceNames());
372                     break;
373 
374                 case BasicPaneFactoryFactoryId:
375                     xComponentFactory = ::cppu::createSingleComponentFactory(
376                         sd::framework::BasicPaneFactory_createInstance,
377                         sd::framework::BasicPaneFactory_getImplementationName(),
378                         sd::framework::BasicPaneFactory_getSupportedServiceNames());
379                     break;
380 
381                 case BasicToolBarFactoryFactoryId:
382                     xComponentFactory = ::cppu::createSingleComponentFactory(
383                         sd::framework::BasicToolBarFactory_createInstance,
384                         sd::framework::BasicToolBarFactory_getImplementationName(),
385                         sd::framework::BasicToolBarFactory_getSupportedServiceNames());
386                     break;
387 
388                 case BasicViewFactoryFactoryId:
389                     xComponentFactory = ::cppu::createSingleComponentFactory(
390                         sd::framework::BasicViewFactory_createInstance,
391                         sd::framework::BasicViewFactory_getImplementationName(),
392                         sd::framework::BasicViewFactory_getSupportedServiceNames());
393                     break;
394 
395                 case SidebarFactoryFactoryId:
396                     xComponentFactory = ::cppu::createSingleComponentFactory(
397                         sd::sidebar::SidebarFactory_createInstance,
398                         sd::sidebar::SidebarFactory_getImplementationName(),
399                         sd::sidebar::SidebarFactory_getSupportedServiceNames());
400                     break;
401 
402                 case ResourceIdFactoryId:
403                     xComponentFactory = ::cppu::createSingleComponentFactory(
404                         sd::framework::ResourceId_createInstance,
405                         sd::framework::ResourceId_getImplementationName(),
406                         sd::framework::ResourceId_getSupportedServiceNames());
407                     break;
408 
409                 case PresentationFactoryProviderFactoryId:
410                     xComponentFactory = ::cppu::createSingleComponentFactory(
411                         sd::framework::PresentationFactoryProvider_createInstance,
412                         sd::framework::PresentationFactoryProvider_getImplementationName(),
413                         sd::framework::PresentationFactoryProvider_getSupportedServiceNames());
414                     break;
415 
416                 case SlideRendererFactoryId:
417                     xComponentFactory = ::cppu::createSingleComponentFactory(
418                         sd::presenter::SlideRenderer_createInstance,
419                         sd::presenter::SlideRenderer_getImplementationName(),
420                         sd::presenter::SlideRenderer_getSupportedServiceNames());
421                     break;
422 
423                 case PresenterCanvasFactoryId:
424                     xComponentFactory = ::cppu::createSingleComponentFactory(
425                         sd::presenter::PresenterCanvas_createInstance,
426                         sd::presenter::PresenterCanvas_getImplementationName(),
427                         sd::presenter::PresenterCanvas_getSupportedServiceNames());
428                     break;
429 
430                 case PresenterTextViewServiceFactoryId:
431                     xComponentFactory = ::cppu::createSingleComponentFactory(
432                         sd::presenter::PresenterTextViewService_createInstance,
433                         sd::presenter::PresenterTextViewService_getImplementationName(),
434                         sd::presenter::PresenterTextViewService_getSupportedServiceNames());
435                     break;
436 
437                 case PresenterHelperServiceFactoryId:
438                     xComponentFactory = ::cppu::createSingleComponentFactory(
439                         sd::presenter::PresenterHelperService_createInstance,
440                         sd::presenter::PresenterHelperService_getImplementationName(),
441                         sd::presenter::PresenterHelperService_getSupportedServiceNames());
442                     break;
443 
444                 case PresenterPreviewCacheFactoryId:
445                     xComponentFactory = ::cppu::createSingleComponentFactory(
446                         sd::presenter::PresenterPreviewCache_createInstance,
447                         sd::presenter::PresenterPreviewCache_getImplementationName(),
448                         sd::presenter::PresenterPreviewCache_getSupportedServiceNames());
449                     break;
450 
451                 case SlideSorterServiceFactoryId:
452                     xComponentFactory = ::cppu::createSingleComponentFactory(
453                         sd::slidesorter::SlideSorterService_createInstance,
454                         sd::slidesorter::SlideSorterService_getImplementationName(),
455                         sd::slidesorter::SlideSorterService_getSupportedServiceNames());
456                     break;
457 
458 				case SlideLayoutControllerFactoryId:
459 					xFactory = ::cppu::createSingleFactory(
460                         xMSF,
461 						sd::SlideLayoutController_getImplementationName(),
462 						sd::SlideLayoutController_createInstance,
463 						sd::SlideLayoutController_getSupportedServiceNames());
464 					break;
465 
466 				case InsertSlideControllerFactoryId:
467 					xFactory = ::cppu::createSingleFactory(
468                         xMSF,
469 						sd::InsertSlideController_getImplementationName(),
470 						sd::InsertSlideController_createInstance,
471 						sd::InsertSlideController_getSupportedServiceNames());
472                 default:
473                     break;
474             }
475             if (xComponentFactory.is())
476             {
477                 xComponentFactory->acquire();
478                 pRet = xComponentFactory.get();
479             }
480             else if (xFactory.is())
481             {
482                 xFactory->acquire();
483                 pRet = xFactory.get();
484             }
485         }
486     }
487 
488     if (pRet != NULL)
489         SdDLL::Init();
490 	return pRet;
491 }
492 
493 } // end of extern "C"
494