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 _UNO_ENVIRONMENT_H_ 28*cdf0e10cSrcweir #define _UNO_ENVIRONMENT_H_ 29*cdf0e10cSrcweir 30*cdf0e10cSrcweir #include <sal/types.h> 31*cdf0e10cSrcweir #include <rtl/ustring.h> 32*cdf0e10cSrcweir 33*cdf0e10cSrcweir #include <stdarg.h> 34*cdf0e10cSrcweir 35*cdf0e10cSrcweir #ifdef __cplusplus 36*cdf0e10cSrcweir extern "C" 37*cdf0e10cSrcweir { 38*cdf0e10cSrcweir #endif 39*cdf0e10cSrcweir 40*cdf0e10cSrcweir struct _uno_ExtEnvironment; 41*cdf0e10cSrcweir struct _typelib_InterfaceTypeDescription; 42*cdf0e10cSrcweir 43*cdf0e10cSrcweir #if defined( SAL_W32) 44*cdf0e10cSrcweir #pragma pack(push, 8) 45*cdf0e10cSrcweir #elif defined(SAL_OS2) 46*cdf0e10cSrcweir #pragma pack(push, 8) 47*cdf0e10cSrcweir #endif 48*cdf0e10cSrcweir 49*cdf0e10cSrcweir /** The binary specification of an UNO environment. 50*cdf0e10cSrcweir */ 51*cdf0e10cSrcweir typedef struct _uno_Environment 52*cdf0e10cSrcweir { 53*cdf0e10cSrcweir /** reserved for future use (0 if not used) 54*cdf0e10cSrcweir */ 55*cdf0e10cSrcweir void * pReserved; 56*cdf0e10cSrcweir 57*cdf0e10cSrcweir /** type name of environment 58*cdf0e10cSrcweir */ 59*cdf0e10cSrcweir rtl_uString * pTypeName; 60*cdf0e10cSrcweir 61*cdf0e10cSrcweir /** free context pointer to be used for specific classes of environments (e.g., a jvm pointer) 62*cdf0e10cSrcweir */ 63*cdf0e10cSrcweir void * pContext; 64*cdf0e10cSrcweir 65*cdf0e10cSrcweir /** pointer to extended environment (interface registration functionality), if supported 66*cdf0e10cSrcweir */ 67*cdf0e10cSrcweir struct _uno_ExtEnvironment * pExtEnv; 68*cdf0e10cSrcweir 69*cdf0e10cSrcweir /** Acquires this environment. 70*cdf0e10cSrcweir 71*cdf0e10cSrcweir @param pEnv this environment 72*cdf0e10cSrcweir */ 73*cdf0e10cSrcweir void (SAL_CALL * acquire)( struct _uno_Environment * pEnv ); 74*cdf0e10cSrcweir 75*cdf0e10cSrcweir /** Releases this environment; last release of environment will revoke the environment from 76*cdf0e10cSrcweir runtime. 77*cdf0e10cSrcweir 78*cdf0e10cSrcweir @param pEnv this environment 79*cdf0e10cSrcweir */ 80*cdf0e10cSrcweir void (SAL_CALL * release)( struct _uno_Environment * pEnv ); 81*cdf0e10cSrcweir 82*cdf0e10cSrcweir /** Acquires this environment weakly. You can only harden a weakly held environment if it 83*cdf0e10cSrcweir is still acquired hard (acquire()). 84*cdf0e10cSrcweir 85*cdf0e10cSrcweir @param pEnv this environment 86*cdf0e10cSrcweir */ 87*cdf0e10cSrcweir void (SAL_CALL * acquireWeak)( struct _uno_Environment * pEnv ); 88*cdf0e10cSrcweir 89*cdf0e10cSrcweir /** Releases this environment weakly in correspondence to acquireWeak(). 90*cdf0e10cSrcweir 91*cdf0e10cSrcweir @param pEnv this environment 92*cdf0e10cSrcweir */ 93*cdf0e10cSrcweir void (SAL_CALL * releaseWeak)( struct _uno_Environment * pEnv ); 94*cdf0e10cSrcweir 95*cdf0e10cSrcweir /** Makes hard reference out of weak referenced environment. You can only harden a weakly 96*cdf0e10cSrcweir held environment if it is still acquired hard (acquire()). 97*cdf0e10cSrcweir 98*cdf0e10cSrcweir @param ppHardEnv inout hard referenced environment (has to be released via release()) 99*cdf0e10cSrcweir @param pEnv environment (may be weak referenced) 100*cdf0e10cSrcweir */ 101*cdf0e10cSrcweir void (SAL_CALL * harden)( 102*cdf0e10cSrcweir struct _uno_Environment ** ppHardEnv, 103*cdf0e10cSrcweir struct _uno_Environment * pEnv ); 104*cdf0e10cSrcweir 105*cdf0e10cSrcweir /** Call this function to EXPLICITLY dispose this environment (e.g., release all 106*cdf0e10cSrcweir interfaces). You may want to call this function before shutting down due to a runtime error. 107*cdf0e10cSrcweir 108*cdf0e10cSrcweir @param pEnv this environment 109*cdf0e10cSrcweir */ 110*cdf0e10cSrcweir void (SAL_CALL * dispose)( struct _uno_Environment * pEnv ); 111*cdf0e10cSrcweir 112*cdf0e10cSrcweir /* ===== the following part will be late initialized by a matching bridge ===== * 113*cdf0e10cSrcweir * ===== and is NOT for public use. ===== */ 114*cdf0e10cSrcweir 115*cdf0e10cSrcweir /** CALLBACK function pointer: Disposing callback function pointer that can be set to get 116*cdf0e10cSrcweir signalled before the environment is destroyed. 117*cdf0e10cSrcweir 118*cdf0e10cSrcweir @param pEnv environment that is being disposed 119*cdf0e10cSrcweir */ 120*cdf0e10cSrcweir void (SAL_CALL * environmentDisposing)( struct _uno_Environment * pEnv ); 121*cdf0e10cSrcweir } uno_Environment; 122*cdf0e10cSrcweir 123*cdf0e10cSrcweir /** Generic function pointer declaration to free a proxy object if it is not needed by the 124*cdf0e10cSrcweir environment anymore. 125*cdf0e10cSrcweir Any proxy object must register itself on first acquire() call and revoke itself on last 126*cdf0e10cSrcweir release() call. This can happen several times because the environment caches proxy objects 127*cdf0e10cSrcweir until the environment explicitly frees the proxy object calling this function. 128*cdf0e10cSrcweir 129*cdf0e10cSrcweir @param pEnv environment 130*cdf0e10cSrcweir @param pProxy proxy pointer 131*cdf0e10cSrcweir */ 132*cdf0e10cSrcweir typedef void (SAL_CALL * uno_freeProxyFunc)( struct _uno_ExtEnvironment * pEnv, void * pProxy ); 133*cdf0e10cSrcweir 134*cdf0e10cSrcweir /** Generic function pointer declaration to allocate memory. Used with getRegisteredInterfaces(). 135*cdf0e10cSrcweir 136*cdf0e10cSrcweir @param nBytes amount of memory in bytes 137*cdf0e10cSrcweir @return pointer to allocated memory 138*cdf0e10cSrcweir */ 139*cdf0e10cSrcweir typedef void * (SAL_CALL * uno_memAlloc)( sal_Size nBytes ); 140*cdf0e10cSrcweir 141*cdf0e10cSrcweir /** The binary specification of an UNO environment supporting interface registration. 142*cdf0e10cSrcweir */ 143*cdf0e10cSrcweir typedef struct _uno_ExtEnvironment 144*cdf0e10cSrcweir { 145*cdf0e10cSrcweir /** inherits all members of an uno_Environment 146*cdf0e10cSrcweir */ 147*cdf0e10cSrcweir uno_Environment aBase; 148*cdf0e10cSrcweir 149*cdf0e10cSrcweir /** Registers an interface of this environment. 150*cdf0e10cSrcweir 151*cdf0e10cSrcweir @param pEnv this environment 152*cdf0e10cSrcweir @param ppInterface inout parameter of interface to be registered 153*cdf0e10cSrcweir @param pOId object id of interface 154*cdf0e10cSrcweir @param pTypeDescr type description of interface 155*cdf0e10cSrcweir */ 156*cdf0e10cSrcweir void (SAL_CALL * registerInterface)( 157*cdf0e10cSrcweir struct _uno_ExtEnvironment * pEnv, 158*cdf0e10cSrcweir void ** ppInterface, 159*cdf0e10cSrcweir rtl_uString * pOId, 160*cdf0e10cSrcweir struct _typelib_InterfaceTypeDescription * pTypeDescr ); 161*cdf0e10cSrcweir 162*cdf0e10cSrcweir /** Registers a proxy interface of this environment that can be reanimated and is freed 163*cdf0e10cSrcweir explicitly by this environment. 164*cdf0e10cSrcweir 165*cdf0e10cSrcweir @param pEnv this environment 166*cdf0e10cSrcweir @param ppInterface inout parameter of interface to be registered 167*cdf0e10cSrcweir @param freeProxy function to free proxy object 168*cdf0e10cSrcweir @param pOId object id of interface 169*cdf0e10cSrcweir @param pTypeDescr type description of interface 170*cdf0e10cSrcweir */ 171*cdf0e10cSrcweir void (SAL_CALL * registerProxyInterface)( 172*cdf0e10cSrcweir struct _uno_ExtEnvironment * pEnv, 173*cdf0e10cSrcweir void ** ppProxy, 174*cdf0e10cSrcweir uno_freeProxyFunc freeProxy, 175*cdf0e10cSrcweir rtl_uString * pOId, 176*cdf0e10cSrcweir struct _typelib_InterfaceTypeDescription * pTypeDescr ); 177*cdf0e10cSrcweir 178*cdf0e10cSrcweir /** Revokes an interface from this environment. You have to revoke any interface that has 179*cdf0e10cSrcweir been registered via this method. 180*cdf0e10cSrcweir 181*cdf0e10cSrcweir @param pEnv this environment 182*cdf0e10cSrcweir @param pInterface interface to be revoked 183*cdf0e10cSrcweir */ 184*cdf0e10cSrcweir void (SAL_CALL * revokeInterface)( 185*cdf0e10cSrcweir struct _uno_ExtEnvironment * pEnv, 186*cdf0e10cSrcweir void * pInterface ); 187*cdf0e10cSrcweir 188*cdf0e10cSrcweir /** Provides the object id of a given interface. 189*cdf0e10cSrcweir 190*cdf0e10cSrcweir @param ppOut inout oid 191*cdf0e10cSrcweir @param pInterface interface of object 192*cdf0e10cSrcweir */ 193*cdf0e10cSrcweir void (SAL_CALL * getObjectIdentifier)( 194*cdf0e10cSrcweir struct _uno_ExtEnvironment * pEnv, 195*cdf0e10cSrcweir rtl_uString ** ppOId, 196*cdf0e10cSrcweir void * pInterface ); 197*cdf0e10cSrcweir 198*cdf0e10cSrcweir /** Retrieves an interface identified by its object id and type from this environment. 199*cdf0e10cSrcweir Interfaces are retrieved in the same order as they are registered. 200*cdf0e10cSrcweir 201*cdf0e10cSrcweir @param pEnv this environment 202*cdf0e10cSrcweir @param ppInterface inout parameter for the registered interface; (0) if none was found 203*cdf0e10cSrcweir @param pOId object id of interface to be retrieved 204*cdf0e10cSrcweir @param pTypeDescr type description of interface to be retrieved 205*cdf0e10cSrcweir */ 206*cdf0e10cSrcweir void (SAL_CALL * getRegisteredInterface)( 207*cdf0e10cSrcweir struct _uno_ExtEnvironment * pEnv, 208*cdf0e10cSrcweir void ** ppInterface, 209*cdf0e10cSrcweir rtl_uString * pOId, 210*cdf0e10cSrcweir struct _typelib_InterfaceTypeDescription * pTypeDescr ); 211*cdf0e10cSrcweir 212*cdf0e10cSrcweir /** Returns all currently registered interfaces of this environment. The memory block 213*cdf0e10cSrcweir allocated might be slightly larger than (*pnLen * sizeof(void *)). 214*cdf0e10cSrcweir 215*cdf0e10cSrcweir @param pEnv this environment 216*cdf0e10cSrcweir @param pppInterfaces out param; pointer to array of interface pointers 217*cdf0e10cSrcweir @param pnLen out param; length of array 218*cdf0e10cSrcweir @param memAlloc function for allocating memory that is passed back 219*cdf0e10cSrcweir */ 220*cdf0e10cSrcweir void (SAL_CALL * getRegisteredInterfaces)( 221*cdf0e10cSrcweir struct _uno_ExtEnvironment * pEnv, 222*cdf0e10cSrcweir void *** pppInterfaces, 223*cdf0e10cSrcweir sal_Int32 * pnLen, 224*cdf0e10cSrcweir uno_memAlloc memAlloc ); 225*cdf0e10cSrcweir 226*cdf0e10cSrcweir /* ===== the following part will be late initialized by a matching bridge ===== */ 227*cdf0e10cSrcweir 228*cdf0e10cSrcweir /** Computes an object id of the given interface; is called by the environment implementation. 229*cdf0e10cSrcweir 230*cdf0e10cSrcweir @param pEnv corresponding environment 231*cdf0e10cSrcweir @param ppOId out param: computed id 232*cdf0e10cSrcweir @param pInterface an interface 233*cdf0e10cSrcweir */ 234*cdf0e10cSrcweir void (SAL_CALL * computeObjectIdentifier)( 235*cdf0e10cSrcweir struct _uno_ExtEnvironment * pEnv, 236*cdf0e10cSrcweir rtl_uString ** ppOId, void * pInterface ); 237*cdf0e10cSrcweir 238*cdf0e10cSrcweir /** Function to acquire an interface. 239*cdf0e10cSrcweir 240*cdf0e10cSrcweir @param pEnv corresponding environment 241*cdf0e10cSrcweir @param pInterface an interface 242*cdf0e10cSrcweir */ 243*cdf0e10cSrcweir void (SAL_CALL * acquireInterface)( 244*cdf0e10cSrcweir struct _uno_ExtEnvironment * pEnv, 245*cdf0e10cSrcweir void * pInterface ); 246*cdf0e10cSrcweir 247*cdf0e10cSrcweir /** Function to release an interface. 248*cdf0e10cSrcweir 249*cdf0e10cSrcweir @param pEnv corresponding environment 250*cdf0e10cSrcweir @param pInterface an interface 251*cdf0e10cSrcweir */ 252*cdf0e10cSrcweir void (SAL_CALL * releaseInterface)( 253*cdf0e10cSrcweir struct _uno_ExtEnvironment * pEnv, 254*cdf0e10cSrcweir void * pInterface ); 255*cdf0e10cSrcweir 256*cdf0e10cSrcweir } uno_ExtEnvironment; 257*cdf0e10cSrcweir 258*cdf0e10cSrcweir #if defined( SAL_W32) || defined(SAL_OS2) 259*cdf0e10cSrcweir #pragma pack(pop) 260*cdf0e10cSrcweir #endif 261*cdf0e10cSrcweir 262*cdf0e10cSrcweir /** Function exported by some bridge library providing acquireInterface(), releaseInterface(); 263*cdf0e10cSrcweir may set a disposing callback. 264*cdf0e10cSrcweir 265*cdf0e10cSrcweir @param pEnv environment to be initialized 266*cdf0e10cSrcweir */ 267*cdf0e10cSrcweir typedef void (SAL_CALL * uno_initEnvironmentFunc)( uno_Environment * pEnv ); 268*cdf0e10cSrcweir #define UNO_INIT_ENVIRONMENT "uno_initEnvironment" 269*cdf0e10cSrcweir 270*cdf0e10cSrcweir /** Gets a specific environment. If the specified environment does not exist, then a default one 271*cdf0e10cSrcweir is created and registered. The environment revokes itself on last release() call. 272*cdf0e10cSrcweir 273*cdf0e10cSrcweir @param ppEnv inout parameter of environment; given environment will be released 274*cdf0e10cSrcweir @param pEnvDcp descriptor of environment 275*cdf0e10cSrcweir @param pContext some context pointer (e.g., to distinguish java vm; set 0 if not needed) 276*cdf0e10cSrcweir */ 277*cdf0e10cSrcweir void SAL_CALL uno_getEnvironment( 278*cdf0e10cSrcweir uno_Environment ** ppEnv, rtl_uString * pEnvDcp, void * pContext ) 279*cdf0e10cSrcweir SAL_THROW_EXTERN_C(); 280*cdf0e10cSrcweir 281*cdf0e10cSrcweir /** Gets all specified environments. Caller has to release returned environments and free allocated 282*cdf0e10cSrcweir memory. 283*cdf0e10cSrcweir 284*cdf0e10cSrcweir @param pppEnvs out param; pointer to array of environments 285*cdf0e10cSrcweir @param pnLen out param; length of array 286*cdf0e10cSrcweir @param memAlloc function for allocating memory that is passed back 287*cdf0e10cSrcweir @param pEnvDcp descriptor of environments; 0 defaults to all 288*cdf0e10cSrcweir */ 289*cdf0e10cSrcweir void SAL_CALL uno_getRegisteredEnvironments( 290*cdf0e10cSrcweir uno_Environment *** pppEnvs, sal_Int32 * pnLen, uno_memAlloc memAlloc, 291*cdf0e10cSrcweir rtl_uString * pEnvDcp ) 292*cdf0e10cSrcweir SAL_THROW_EXTERN_C(); 293*cdf0e10cSrcweir 294*cdf0e10cSrcweir /** Creates an environment. The new environment is anonymous (NOT publicly registered/ accessible). 295*cdf0e10cSrcweir 296*cdf0e10cSrcweir @param ppEnv out parameter of environment; given environment will be released 297*cdf0e10cSrcweir @param pEnvDcp descriptor of environment 298*cdf0e10cSrcweir @param pContext context pointer (e.g., to distinguish java vm); set 0 if not needed 299*cdf0e10cSrcweir */ 300*cdf0e10cSrcweir void SAL_CALL uno_createEnvironment( 301*cdf0e10cSrcweir uno_Environment ** ppEnv, rtl_uString * pEnvDcp, void * pContext ) 302*cdf0e10cSrcweir SAL_THROW_EXTERN_C(); 303*cdf0e10cSrcweir 304*cdf0e10cSrcweir /** Dumps out environment information, i.e. registered interfaces. 305*cdf0e10cSrcweir 306*cdf0e10cSrcweir @param stream output stream (FILE *) 307*cdf0e10cSrcweir @param pEnv environment to be dumped 308*cdf0e10cSrcweir @param pFilter if not null, filters output 309*cdf0e10cSrcweir */ 310*cdf0e10cSrcweir void SAL_CALL uno_dumpEnvironment( 311*cdf0e10cSrcweir void * stream, uno_Environment * pEnv, const sal_Char * pFilter ) 312*cdf0e10cSrcweir SAL_THROW_EXTERN_C(); 313*cdf0e10cSrcweir /** Dumps out environment information, i.e. registered interfaces. 314*cdf0e10cSrcweir 315*cdf0e10cSrcweir @param stream output stream (FILE *) 316*cdf0e10cSrcweir @param pEnvDcp descritpro of environment to be dumped 317*cdf0e10cSrcweir @param pFilter if not null, filters output 318*cdf0e10cSrcweir */ 319*cdf0e10cSrcweir void SAL_CALL uno_dumpEnvironmentByName( 320*cdf0e10cSrcweir void * stream, rtl_uString * pEnvDcp, const sal_Char * pFilter ) 321*cdf0e10cSrcweir SAL_THROW_EXTERN_C(); 322*cdf0e10cSrcweir 323*cdf0e10cSrcweir 324*cdf0e10cSrcweir 325*cdf0e10cSrcweir /** Returns the current Environment. 326*cdf0e10cSrcweir In case no Environment has explicitly been entered, a purpose free 327*cdf0e10cSrcweir default environment gets returned (e.g. the "uno" or "gcc3" Environment). 328*cdf0e10cSrcweir 329*cdf0e10cSrcweir @param ppEnv inout parameter; a given environment will be released 330*cdf0e10cSrcweir @param pTypeName the optional type of the environment, falls back to "uno" 331*cdf0e10cSrcweir @since UDK 3.2.7 332*cdf0e10cSrcweir */ 333*cdf0e10cSrcweir void SAL_CALL uno_getCurrentEnvironment(uno_Environment ** ppEnv, rtl_uString * pTypeName) 334*cdf0e10cSrcweir SAL_THROW_EXTERN_C(); 335*cdf0e10cSrcweir 336*cdf0e10cSrcweir /** Typedef for variable argument function. 337*cdf0e10cSrcweir */ 338*cdf0e10cSrcweir typedef void SAL_CALL uno_EnvCallee(va_list * pParam); 339*cdf0e10cSrcweir 340*cdf0e10cSrcweir /** Invoke the passed function in the given environment. 341*cdf0e10cSrcweir 342*cdf0e10cSrcweir @param pEnv the target environment 343*cdf0e10cSrcweir @param pCallee the function to call 344*cdf0e10cSrcweir @param pParam the parameter pointer passed to the function 345*cdf0e10cSrcweir @since UDK 3.2.7 346*cdf0e10cSrcweir */ 347*cdf0e10cSrcweir void SAL_CALL uno_Environment_invoke_v(uno_Environment * pEnv, uno_EnvCallee * pCallee, va_list * pParam) 348*cdf0e10cSrcweir SAL_THROW_EXTERN_C(); 349*cdf0e10cSrcweir 350*cdf0e10cSrcweir /** Invoke the passed function in the given environment. 351*cdf0e10cSrcweir 352*cdf0e10cSrcweir @param pEnv the target environment 353*cdf0e10cSrcweir @param pCallee the function to call 354*cdf0e10cSrcweir @param ... the parameters passed to the function 355*cdf0e10cSrcweir @since UDK 3.2.7 356*cdf0e10cSrcweir */ 357*cdf0e10cSrcweir void SAL_CALL uno_Environment_invoke (uno_Environment * pEnv, uno_EnvCallee * pCallee, ...) 358*cdf0e10cSrcweir SAL_THROW_EXTERN_C(); 359*cdf0e10cSrcweir 360*cdf0e10cSrcweir /** Enter an environment explicitly. 361*cdf0e10cSrcweir 362*cdf0e10cSrcweir @param pEnv the environment to enter; NULL leaves all environments 363*cdf0e10cSrcweir @since UDK 3.2.7 364*cdf0e10cSrcweir */ 365*cdf0e10cSrcweir void SAL_CALL uno_Environment_enter(uno_Environment * pEnv) 366*cdf0e10cSrcweir SAL_THROW_EXTERN_C(); 367*cdf0e10cSrcweir 368*cdf0e10cSrcweir /** Check if a particular environment is currently valid, so 369*cdf0e10cSrcweir that objects of that environment might be called. 370*cdf0e10cSrcweir 371*cdf0e10cSrcweir @param pEnv the environment 372*cdf0e10cSrcweir @param rtl_uString ** pReason the reason, if it is not valid 373*cdf0e10cSrcweir @return 1 == valid, 0 == invalid 374*cdf0e10cSrcweir @since UDK 3.2.7 375*cdf0e10cSrcweir */ 376*cdf0e10cSrcweir int SAL_CALL uno_Environment_isValid(uno_Environment * pEnv, rtl_uString ** pReason) 377*cdf0e10cSrcweir SAL_THROW_EXTERN_C(); 378*cdf0e10cSrcweir 379*cdf0e10cSrcweir 380*cdf0e10cSrcweir 381*cdf0e10cSrcweir #ifdef __cplusplus 382*cdf0e10cSrcweir } 383*cdf0e10cSrcweir #endif 384*cdf0e10cSrcweir 385*cdf0e10cSrcweir #endif 386