1*b1cdbd2cSJim Jagielski /************************************************************** 2*b1cdbd2cSJim Jagielski * 3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski * distributed with this work for additional information 6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski * 11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski * under the License. 19*b1cdbd2cSJim Jagielski * 20*b1cdbd2cSJim Jagielski *************************************************************/ 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielski #ifndef AUTOMATION_BRIDGE_WINDATA_HXX 24*b1cdbd2cSJim Jagielski #define AUTOMATION_BRIDGE_WINDATA_HXX 25*b1cdbd2cSJim Jagielski 26*b1cdbd2cSJim Jagielski #pragma warning (push,1) 27*b1cdbd2cSJim Jagielski #pragma warning (disable:4668) 28*b1cdbd2cSJim Jagielski #pragma warning (disable:4548) 29*b1cdbd2cSJim Jagielski #include "oleidl.h" 30*b1cdbd2cSJim Jagielski 31*b1cdbd2cSJim Jagielski #include <atlbase.h> 32*b1cdbd2cSJim Jagielski #pragma warning (pop) 33*b1cdbd2cSJim Jagielski #include "osl/diagnose.h" 34*b1cdbd2cSJim Jagielski 35*b1cdbd2cSJim Jagielski namespace ole_adapter 36*b1cdbd2cSJim Jagielski { 37*b1cdbd2cSJim Jagielski //Wrapper for VARDESC 38*b1cdbd2cSJim Jagielski class VarDesc 39*b1cdbd2cSJim Jagielski { 40*b1cdbd2cSJim Jagielski VARDESC* operator = (const VarDesc*); 41*b1cdbd2cSJim Jagielski VarDesc(const VarDesc&); 42*b1cdbd2cSJim Jagielski // Construction 43*b1cdbd2cSJim Jagielski public: 44*b1cdbd2cSJim Jagielski CComPtr< ITypeInfo > m_pTypeInfo; 45*b1cdbd2cSJim Jagielski VARDESC* m_pVarDesc; 46*b1cdbd2cSJim Jagielski VarDesc(ITypeInfo * pTypeInfo)47*b1cdbd2cSJim Jagielski VarDesc(ITypeInfo* pTypeInfo) : 48*b1cdbd2cSJim Jagielski m_pVarDesc(NULL), 49*b1cdbd2cSJim Jagielski m_pTypeInfo(pTypeInfo) 50*b1cdbd2cSJim Jagielski { 51*b1cdbd2cSJim Jagielski OSL_ASSERT(pTypeInfo); 52*b1cdbd2cSJim Jagielski } ~VarDesc()53*b1cdbd2cSJim Jagielski ~VarDesc() 54*b1cdbd2cSJim Jagielski { 55*b1cdbd2cSJim Jagielski if (m_pVarDesc != NULL) 56*b1cdbd2cSJim Jagielski { 57*b1cdbd2cSJim Jagielski m_pTypeInfo->ReleaseVarDesc(m_pVarDesc); 58*b1cdbd2cSJim Jagielski } 59*b1cdbd2cSJim Jagielski } 60*b1cdbd2cSJim Jagielski operator ->()61*b1cdbd2cSJim Jagielski VARDESC* operator->() 62*b1cdbd2cSJim Jagielski { 63*b1cdbd2cSJim Jagielski return m_pVarDesc; 64*b1cdbd2cSJim Jagielski } 65*b1cdbd2cSJim Jagielski operator &()66*b1cdbd2cSJim Jagielski VARDESC** operator&() 67*b1cdbd2cSJim Jagielski { 68*b1cdbd2cSJim Jagielski return &m_pVarDesc; 69*b1cdbd2cSJim Jagielski } 70*b1cdbd2cSJim Jagielski operator VARDESC*()71*b1cdbd2cSJim Jagielski operator VARDESC* () 72*b1cdbd2cSJim Jagielski { 73*b1cdbd2cSJim Jagielski return m_pVarDesc; 74*b1cdbd2cSJim Jagielski } 75*b1cdbd2cSJim Jagielski }; 76*b1cdbd2cSJim Jagielski 77*b1cdbd2cSJim Jagielski //Wrapper for FUNCDESC structure 78*b1cdbd2cSJim Jagielski class FuncDesc 79*b1cdbd2cSJim Jagielski { 80*b1cdbd2cSJim Jagielski FUNCDESC* operator = (const FuncDesc &); 81*b1cdbd2cSJim Jagielski FuncDesc(const FuncDesc&); 82*b1cdbd2cSJim Jagielski CComPtr<ITypeInfo> m_pTypeInfo; 83*b1cdbd2cSJim Jagielski FUNCDESC * m_pFuncDesc; 84*b1cdbd2cSJim Jagielski 85*b1cdbd2cSJim Jagielski public: 86*b1cdbd2cSJim Jagielski FuncDesc(ITypeInfo * pTypeInfo)87*b1cdbd2cSJim Jagielski FuncDesc(ITypeInfo * pTypeInfo) : 88*b1cdbd2cSJim Jagielski m_pFuncDesc(NULL), 89*b1cdbd2cSJim Jagielski m_pTypeInfo(pTypeInfo) 90*b1cdbd2cSJim Jagielski { 91*b1cdbd2cSJim Jagielski OSL_ASSERT(pTypeInfo); 92*b1cdbd2cSJim Jagielski } ~FuncDesc()93*b1cdbd2cSJim Jagielski ~FuncDesc() 94*b1cdbd2cSJim Jagielski { 95*b1cdbd2cSJim Jagielski ReleaseFUNCDESC(); 96*b1cdbd2cSJim Jagielski } 97*b1cdbd2cSJim Jagielski operator ->()98*b1cdbd2cSJim Jagielski FUNCDESC* operator -> () 99*b1cdbd2cSJim Jagielski { 100*b1cdbd2cSJim Jagielski return m_pFuncDesc; 101*b1cdbd2cSJim Jagielski } 102*b1cdbd2cSJim Jagielski operator &()103*b1cdbd2cSJim Jagielski FUNCDESC** operator & () 104*b1cdbd2cSJim Jagielski { 105*b1cdbd2cSJim Jagielski return & m_pFuncDesc; 106*b1cdbd2cSJim Jagielski } 107*b1cdbd2cSJim Jagielski operator FUNCDESC*()108*b1cdbd2cSJim Jagielski operator FUNCDESC* () 109*b1cdbd2cSJim Jagielski { 110*b1cdbd2cSJim Jagielski return m_pFuncDesc; 111*b1cdbd2cSJim Jagielski } 112*b1cdbd2cSJim Jagielski operator =(FUNCDESC * pDesc)113*b1cdbd2cSJim Jagielski FUNCDESC* operator = (FUNCDESC* pDesc) 114*b1cdbd2cSJim Jagielski { 115*b1cdbd2cSJim Jagielski ReleaseFUNCDESC(); 116*b1cdbd2cSJim Jagielski m_pFuncDesc = pDesc; 117*b1cdbd2cSJim Jagielski return m_pFuncDesc; 118*b1cdbd2cSJim Jagielski } Detach()119*b1cdbd2cSJim Jagielski FUNCDESC* Detach() 120*b1cdbd2cSJim Jagielski { 121*b1cdbd2cSJim Jagielski FUNCDESC* pDesc = m_pFuncDesc; 122*b1cdbd2cSJim Jagielski m_pFuncDesc = NULL; 123*b1cdbd2cSJim Jagielski return pDesc; 124*b1cdbd2cSJim Jagielski } 125*b1cdbd2cSJim Jagielski ReleaseFUNCDESC()126*b1cdbd2cSJim Jagielski void ReleaseFUNCDESC() 127*b1cdbd2cSJim Jagielski { 128*b1cdbd2cSJim Jagielski if (m_pFuncDesc != NULL) 129*b1cdbd2cSJim Jagielski { 130*b1cdbd2cSJim Jagielski m_pTypeInfo->ReleaseFuncDesc(m_pFuncDesc); 131*b1cdbd2cSJim Jagielski } 132*b1cdbd2cSJim Jagielski m_pFuncDesc = NULL; 133*b1cdbd2cSJim Jagielski } 134*b1cdbd2cSJim Jagielski }; 135*b1cdbd2cSJim Jagielski //Wrapper for EXCEPINFO structure 136*b1cdbd2cSJim Jagielski class ExcepInfo : public EXCEPINFO 137*b1cdbd2cSJim Jagielski { 138*b1cdbd2cSJim Jagielski EXCEPINFO* operator = (const ExcepInfo& ); 139*b1cdbd2cSJim Jagielski ExcepInfo(const ExcepInfo &); 140*b1cdbd2cSJim Jagielski public: ExcepInfo()141*b1cdbd2cSJim Jagielski ExcepInfo() 142*b1cdbd2cSJim Jagielski { 143*b1cdbd2cSJim Jagielski memset(this, 0, sizeof(ExcepInfo)); 144*b1cdbd2cSJim Jagielski } ~ExcepInfo()145*b1cdbd2cSJim Jagielski ~ExcepInfo() 146*b1cdbd2cSJim Jagielski { 147*b1cdbd2cSJim Jagielski if (bstrSource != NULL) 148*b1cdbd2cSJim Jagielski ::SysFreeString(bstrSource); 149*b1cdbd2cSJim Jagielski if (bstrDescription != NULL) 150*b1cdbd2cSJim Jagielski ::SysFreeString(bstrDescription); 151*b1cdbd2cSJim Jagielski if (bstrHelpFile != NULL) 152*b1cdbd2cSJim Jagielski ::SysFreeString(bstrHelpFile); 153*b1cdbd2cSJim Jagielski } 154*b1cdbd2cSJim Jagielski }; 155*b1cdbd2cSJim Jagielski 156*b1cdbd2cSJim Jagielski //Wrapper for TYPEATTR 157*b1cdbd2cSJim Jagielski class TypeAttr 158*b1cdbd2cSJim Jagielski { 159*b1cdbd2cSJim Jagielski TYPEATTR* operator = (const TypeAttr &); 160*b1cdbd2cSJim Jagielski TypeAttr(const TypeAttr &); 161*b1cdbd2cSJim Jagielski public: 162*b1cdbd2cSJim Jagielski CComPtr< ITypeInfo > m_pTypeInfo; 163*b1cdbd2cSJim Jagielski TYPEATTR* m_pTypeAttr; 164*b1cdbd2cSJim Jagielski TypeAttr(ITypeInfo * pTypeInfo)165*b1cdbd2cSJim Jagielski TypeAttr(ITypeInfo* pTypeInfo) : 166*b1cdbd2cSJim Jagielski m_pTypeAttr( NULL ), 167*b1cdbd2cSJim Jagielski m_pTypeInfo( pTypeInfo ) 168*b1cdbd2cSJim Jagielski { 169*b1cdbd2cSJim Jagielski OSL_ASSERT(pTypeInfo); 170*b1cdbd2cSJim Jagielski } ~TypeAttr()171*b1cdbd2cSJim Jagielski ~TypeAttr() throw() 172*b1cdbd2cSJim Jagielski { 173*b1cdbd2cSJim Jagielski if (m_pTypeAttr != NULL) 174*b1cdbd2cSJim Jagielski { 175*b1cdbd2cSJim Jagielski m_pTypeInfo->ReleaseTypeAttr(m_pTypeAttr); 176*b1cdbd2cSJim Jagielski } 177*b1cdbd2cSJim Jagielski } 178*b1cdbd2cSJim Jagielski operator &()179*b1cdbd2cSJim Jagielski TYPEATTR** operator&() throw() 180*b1cdbd2cSJim Jagielski { 181*b1cdbd2cSJim Jagielski return &m_pTypeAttr; 182*b1cdbd2cSJim Jagielski } 183*b1cdbd2cSJim Jagielski operator ->()184*b1cdbd2cSJim Jagielski TYPEATTR* operator->() throw() 185*b1cdbd2cSJim Jagielski { 186*b1cdbd2cSJim Jagielski return m_pTypeAttr; 187*b1cdbd2cSJim Jagielski } 188*b1cdbd2cSJim Jagielski }; 189*b1cdbd2cSJim Jagielski 190*b1cdbd2cSJim Jagielski 191*b1cdbd2cSJim Jagielski 192*b1cdbd2cSJim Jagielski } 193*b1cdbd2cSJim Jagielski 194*b1cdbd2cSJim Jagielski #endif 195