xref: /aoo41x/main/extensions/source/ole/windata.hxx (revision cdf0e10c)
1*cdf0e10cSrcweir /*************************************************************************
2*cdf0e10cSrcweir  *
3*cdf0e10cSrcweir  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4*cdf0e10cSrcweir  *
5*cdf0e10cSrcweir  * Copyright 2000, 2010 Oracle and/or its affiliates.
6*cdf0e10cSrcweir  *
7*cdf0e10cSrcweir  * OpenOffice.org - a multi-platform office productivity suite
8*cdf0e10cSrcweir  *
9*cdf0e10cSrcweir  * This file is part of OpenOffice.org.
10*cdf0e10cSrcweir  *
11*cdf0e10cSrcweir  * OpenOffice.org is free software: you can redistribute it and/or modify
12*cdf0e10cSrcweir  * it under the terms of the GNU Lesser General Public License version 3
13*cdf0e10cSrcweir  * only, as published by the Free Software Foundation.
14*cdf0e10cSrcweir  *
15*cdf0e10cSrcweir  * OpenOffice.org is distributed in the hope that it will be useful,
16*cdf0e10cSrcweir  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17*cdf0e10cSrcweir  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18*cdf0e10cSrcweir  * GNU Lesser General Public License version 3 for more details
19*cdf0e10cSrcweir  * (a copy is included in the LICENSE file that accompanied this code).
20*cdf0e10cSrcweir  *
21*cdf0e10cSrcweir  * You should have received a copy of the GNU Lesser General Public License
22*cdf0e10cSrcweir  * version 3 along with OpenOffice.org.  If not, see
23*cdf0e10cSrcweir  * <http://www.openoffice.org/license.html>
24*cdf0e10cSrcweir  * for a copy of the LGPLv3 License.
25*cdf0e10cSrcweir  *
26*cdf0e10cSrcweir  ************************************************************************/
27*cdf0e10cSrcweir #ifndef AUTOMATION_BRIDGE_WINDATA_HXX
28*cdf0e10cSrcweir #define AUTOMATION_BRIDGE_WINDATA_HXX
29*cdf0e10cSrcweir 
30*cdf0e10cSrcweir #pragma warning (push,1)
31*cdf0e10cSrcweir #pragma warning (disable:4668)
32*cdf0e10cSrcweir #pragma warning (disable:4548)
33*cdf0e10cSrcweir #include "oleidl.h"
34*cdf0e10cSrcweir 
35*cdf0e10cSrcweir #include <atlbase.h>
36*cdf0e10cSrcweir #pragma warning (pop)
37*cdf0e10cSrcweir #include "osl/diagnose.h"
38*cdf0e10cSrcweir 
39*cdf0e10cSrcweir namespace ole_adapter
40*cdf0e10cSrcweir {
41*cdf0e10cSrcweir //Wrapper for VARDESC
42*cdf0e10cSrcweir class VarDesc
43*cdf0e10cSrcweir {
44*cdf0e10cSrcweir 	VARDESC* operator = (const VarDesc*);
45*cdf0e10cSrcweir 	VarDesc(const VarDesc&);
46*cdf0e10cSrcweir // Construction
47*cdf0e10cSrcweir public:
48*cdf0e10cSrcweir 	CComPtr< ITypeInfo > m_pTypeInfo;
49*cdf0e10cSrcweir 	VARDESC* m_pVarDesc;
50*cdf0e10cSrcweir 
51*cdf0e10cSrcweir 	VarDesc(ITypeInfo* pTypeInfo) :
52*cdf0e10cSrcweir 	  m_pVarDesc(NULL),
53*cdf0e10cSrcweir 	  m_pTypeInfo(pTypeInfo)
54*cdf0e10cSrcweir    {
55*cdf0e10cSrcweir 	   OSL_ASSERT(pTypeInfo);
56*cdf0e10cSrcweir    }
57*cdf0e10cSrcweir    ~VarDesc()
58*cdf0e10cSrcweir    {
59*cdf0e10cSrcweir 	  if (m_pVarDesc != NULL)
60*cdf0e10cSrcweir 	  {
61*cdf0e10cSrcweir 		 m_pTypeInfo->ReleaseVarDesc(m_pVarDesc);
62*cdf0e10cSrcweir 	  }
63*cdf0e10cSrcweir    }
64*cdf0e10cSrcweir 
65*cdf0e10cSrcweir    VARDESC* operator->()
66*cdf0e10cSrcweir    {
67*cdf0e10cSrcweir 	  return m_pVarDesc;
68*cdf0e10cSrcweir    }
69*cdf0e10cSrcweir 
70*cdf0e10cSrcweir    VARDESC** operator&()
71*cdf0e10cSrcweir    {
72*cdf0e10cSrcweir 	  return &m_pVarDesc;
73*cdf0e10cSrcweir    }
74*cdf0e10cSrcweir 
75*cdf0e10cSrcweir     operator VARDESC* ()
76*cdf0e10cSrcweir     {
77*cdf0e10cSrcweir         return m_pVarDesc;
78*cdf0e10cSrcweir     }
79*cdf0e10cSrcweir };
80*cdf0e10cSrcweir 
81*cdf0e10cSrcweir //Wrapper for FUNCDESC structure
82*cdf0e10cSrcweir class FuncDesc
83*cdf0e10cSrcweir {
84*cdf0e10cSrcweir 	FUNCDESC* operator = (const FuncDesc &);
85*cdf0e10cSrcweir 	FuncDesc(const FuncDesc&);
86*cdf0e10cSrcweir 	CComPtr<ITypeInfo> m_pTypeInfo;
87*cdf0e10cSrcweir     FUNCDESC * m_pFuncDesc;
88*cdf0e10cSrcweir 
89*cdf0e10cSrcweir public:
90*cdf0e10cSrcweir 
91*cdf0e10cSrcweir 	FuncDesc(ITypeInfo * pTypeInfo) :
92*cdf0e10cSrcweir 		m_pFuncDesc(NULL),
93*cdf0e10cSrcweir 		m_pTypeInfo(pTypeInfo)
94*cdf0e10cSrcweir 		{
95*cdf0e10cSrcweir 			OSL_ASSERT(pTypeInfo);
96*cdf0e10cSrcweir 		}
97*cdf0e10cSrcweir 	~FuncDesc()
98*cdf0e10cSrcweir 	{
99*cdf0e10cSrcweir 		ReleaseFUNCDESC();
100*cdf0e10cSrcweir 	}
101*cdf0e10cSrcweir 
102*cdf0e10cSrcweir 	FUNCDESC* operator -> ()
103*cdf0e10cSrcweir 	{
104*cdf0e10cSrcweir 		return m_pFuncDesc;
105*cdf0e10cSrcweir 	}
106*cdf0e10cSrcweir 
107*cdf0e10cSrcweir 	FUNCDESC** operator & ()
108*cdf0e10cSrcweir 	{
109*cdf0e10cSrcweir 		return & m_pFuncDesc;
110*cdf0e10cSrcweir 	}
111*cdf0e10cSrcweir 
112*cdf0e10cSrcweir     operator FUNCDESC* ()
113*cdf0e10cSrcweir     {
114*cdf0e10cSrcweir         return m_pFuncDesc;
115*cdf0e10cSrcweir     }
116*cdf0e10cSrcweir 
117*cdf0e10cSrcweir 	FUNCDESC* operator = (FUNCDESC* pDesc)
118*cdf0e10cSrcweir 	{
119*cdf0e10cSrcweir 		ReleaseFUNCDESC();
120*cdf0e10cSrcweir 		m_pFuncDesc = pDesc;
121*cdf0e10cSrcweir 		return m_pFuncDesc;
122*cdf0e10cSrcweir 	}
123*cdf0e10cSrcweir 	FUNCDESC* Detach()
124*cdf0e10cSrcweir 	{
125*cdf0e10cSrcweir 		FUNCDESC* pDesc = m_pFuncDesc;
126*cdf0e10cSrcweir 		m_pFuncDesc = NULL;
127*cdf0e10cSrcweir 		return pDesc;
128*cdf0e10cSrcweir 	}
129*cdf0e10cSrcweir 
130*cdf0e10cSrcweir 	void ReleaseFUNCDESC()
131*cdf0e10cSrcweir 	{
132*cdf0e10cSrcweir 		if (m_pFuncDesc != NULL)
133*cdf0e10cSrcweir 		{
134*cdf0e10cSrcweir 			m_pTypeInfo->ReleaseFuncDesc(m_pFuncDesc);
135*cdf0e10cSrcweir 		}
136*cdf0e10cSrcweir 		m_pFuncDesc = NULL;
137*cdf0e10cSrcweir 	}
138*cdf0e10cSrcweir };
139*cdf0e10cSrcweir //Wrapper for EXCEPINFO structure
140*cdf0e10cSrcweir class ExcepInfo : public EXCEPINFO
141*cdf0e10cSrcweir {
142*cdf0e10cSrcweir 	EXCEPINFO* operator = (const ExcepInfo& );
143*cdf0e10cSrcweir 	ExcepInfo(const ExcepInfo &);
144*cdf0e10cSrcweir public:
145*cdf0e10cSrcweir    ExcepInfo()
146*cdf0e10cSrcweir    {
147*cdf0e10cSrcweir 	  memset(this, 0, sizeof(ExcepInfo));
148*cdf0e10cSrcweir    }
149*cdf0e10cSrcweir    ~ExcepInfo()
150*cdf0e10cSrcweir    {
151*cdf0e10cSrcweir    	  if (bstrSource != NULL)
152*cdf0e10cSrcweir 		 ::SysFreeString(bstrSource);
153*cdf0e10cSrcweir 	  if (bstrDescription != NULL)
154*cdf0e10cSrcweir 		::SysFreeString(bstrDescription);
155*cdf0e10cSrcweir 	  if (bstrHelpFile != NULL)
156*cdf0e10cSrcweir 		::SysFreeString(bstrHelpFile);
157*cdf0e10cSrcweir    }
158*cdf0e10cSrcweir };
159*cdf0e10cSrcweir 
160*cdf0e10cSrcweir //Wrapper for TYPEATTR
161*cdf0e10cSrcweir class TypeAttr
162*cdf0e10cSrcweir {
163*cdf0e10cSrcweir 	TYPEATTR* operator = (const TypeAttr &);
164*cdf0e10cSrcweir 	TypeAttr(const TypeAttr &);
165*cdf0e10cSrcweir public:
166*cdf0e10cSrcweir 	CComPtr< ITypeInfo > m_pTypeInfo;
167*cdf0e10cSrcweir 	TYPEATTR* m_pTypeAttr;
168*cdf0e10cSrcweir 
169*cdf0e10cSrcweir 	TypeAttr(ITypeInfo* pTypeInfo) :
170*cdf0e10cSrcweir 	  m_pTypeAttr( NULL ),
171*cdf0e10cSrcweir 	  m_pTypeInfo( pTypeInfo )
172*cdf0e10cSrcweir    {
173*cdf0e10cSrcweir 	   OSL_ASSERT(pTypeInfo);
174*cdf0e10cSrcweir    }
175*cdf0e10cSrcweir    ~TypeAttr() throw()
176*cdf0e10cSrcweir    {
177*cdf0e10cSrcweir 		if (m_pTypeAttr != NULL)
178*cdf0e10cSrcweir 		{
179*cdf0e10cSrcweir 			m_pTypeInfo->ReleaseTypeAttr(m_pTypeAttr);
180*cdf0e10cSrcweir 		}
181*cdf0e10cSrcweir    }
182*cdf0e10cSrcweir 
183*cdf0e10cSrcweir    TYPEATTR** operator&() throw()
184*cdf0e10cSrcweir    {
185*cdf0e10cSrcweir 	  return &m_pTypeAttr;
186*cdf0e10cSrcweir    }
187*cdf0e10cSrcweir 
188*cdf0e10cSrcweir    TYPEATTR* operator->() throw()
189*cdf0e10cSrcweir    {
190*cdf0e10cSrcweir 	  return m_pTypeAttr;
191*cdf0e10cSrcweir    }
192*cdf0e10cSrcweir };
193*cdf0e10cSrcweir 
194*cdf0e10cSrcweir 
195*cdf0e10cSrcweir 
196*cdf0e10cSrcweir }
197*cdf0e10cSrcweir 
198*cdf0e10cSrcweir #endif
199