xref: /trunk/main/extensions/source/ole/olethread.cxx (revision 2a97ec55)
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_extensions.hxx"
26  #if defined _MSC_VER && ( _MSC_VER >= 1200 )
27  #define _WIN32_WINNT  0x0400
28  #endif
29  
30  #include "ole2uno.hxx"
31  
32  #include <tools/presys.h>
33  #include <tools/postsys.h>
34  
35  #include <vos/thread.hxx>
36  
37  using namespace vos;
38  using namespace std;
39  
40  namespace ole_adapter
41  {
42  // CoInitializeEx *
43  typedef DECLSPEC_IMPORT HRESULT (STDAPICALLTYPE *ptrCoInitEx)( LPVOID, DWORD);
44  // CoInitialize *
45  typedef DECLSPEC_IMPORT HRESULT (STDAPICALLTYPE *ptrCoInit)( LPVOID);
46  
o2u_attachCurrentThread()47  void o2u_attachCurrentThread()
48  {
49  	static OThreadData oleThreadData;
50  
51      if ((sal_Bool)(sal_IntPtr)oleThreadData.getData() != sal_True)
52  	{
53  		HINSTANCE inst=	LoadLibrary( _T("ole32.dll"));
54  		if( inst )
55  		{
56  			HRESULT hr;
57  			// Try DCOM
58  			ptrCoInitEx initFuncEx= (ptrCoInitEx)GetProcAddress( inst, _T("CoInitializeEx"));
59  			if( initFuncEx)
60  				hr= initFuncEx( NULL, COINIT_MULTITHREADED);
61  			// No DCOM, try COM
62  			else
63  			{
64  				ptrCoInit initFunc= (ptrCoInit)GetProcAddress( inst,_T("CoInitialize"));
65  				if( initFunc)
66  					hr= initFunc( NULL);
67  			}
68  		}
69  		oleThreadData.setData((void*)sal_True);
70  	}
71  }
72  
73  } // end namespace
74