20#include "typelib/typedescription.h"
21#include "rtl/ustrbuf.hxx"
23#include "com/sun/star/uno/RuntimeException.hpp"
29#using <cli_uretypes.dll>
31namespace sr = System::Reflection;
32namespace st = System::Text;
33namespace sc = System::Collections;
34namespace srrm = System::Runtime::Remoting::Messaging;
35namespace srr = System::Runtime::Remoting;
36namespace srrp = System::Runtime::Remoting::Proxies;
37namespace sd = System::Diagnostics;
38namespace ucss = unoidl::com::sun::star;
45void SAL_CALL
cli_proxy_free( uno_ExtEnvironment * env,
void * proxy )
56 void * uno_ret,
void * uno_args[],
uno_Any ** uno_exc )
66 typelib_InterfaceTypeDescription* td):
79 sal_Bool bComplete = ::typelib_typedescription_complete( & _pt);
99 m_unoI->release(m_unoI);
106 uno_Interface * pUnoI,
107 typelib_InterfaceTypeDescription* pTD,
108 const OUString& oid )
109 :RealProxy(MarshalByRefObject::typeid),
112 m_sTypeName(m_system_Object_String)
121#if OSL_DEBUG_LEVEL >= 2
136#if OSL_DEBUG_LEVEL >= 2
137 sd::Trace::WriteLine(System::String::Format(
138 gcnew System::String(
"cli uno bridge: Destroying proxy "
139 "for UNO object, OID: \n\t{0} \n\twith uno interfaces: "),
143 rtl_uString_release(_sInterfaces);
152 uno_Interface * pUnoI,
153 typelib_InterfaceTypeDescription* pTD,
158 System::Object^ proxy= proxyHandler->GetTransparentProxy();
165 typelib_InterfaceTypeDescription* pTd)
167 sc::IEnumerator^ enumInfos =
m_listIfaces->GetEnumerator();
168 System::Threading::Monitor::Enter(
this);
171 while (enumInfos->MoveNext())
189#if OSL_DEBUG_LEVEL >= 2
192 sd::Trace::WriteLine(System::String::Format(
193 gcnew System::String(
"cli uno bridge: Creating proxy for uno object, "
194 "id:\n\t{0}\n\t{1}"),
m_oid, sInterfaceName));
199 rtl_uString_newConcat( pp_sInterfaces, * pp_sInterfaces,
200 _sNewInterface.pData);
204 System::Threading::Monitor::Exit(
this);
213 if (fromType == System::Object::typeid)
216 System::Threading::Monitor::Enter(
this);
219 if (
nullptr !=
findInfo( fromType ))
228 css::uno::TypeDescription membertd(
229 reinterpret_cast<typelib_InterfaceTypeDescription*
>(
231 array<System::Object^>^
args = gcnew array<System::Object^>(1);
235 System::Object^ pException =
nullptr;
241 ((typelib_InterfaceMethodTypeDescription*)
242 membertd.get())->pReturnTypeRef,
244 ((typelib_InterfaceMethodTypeDescription*)
245 membertd.get())->pParams,
246 args,
nullptr, &pException) );
250 nullptr == pException,
253 RTL_TEXTENCODING_UTF8 ).getStr() );
255 if (pAny->Type != void::typeid)
257 if (
nullptr !=
findInfo( fromType ))
267 ::System::Object ^ obj = pAny->Value;
268 OSL_ASSERT( srr::RemotingServices::IsTransparentProxy( obj ) );
269 if (srr::RemotingServices::IsTransparentProxy( obj ))
273 srr::RemotingServices::GetRealProxy( obj ) );
274 OSL_ASSERT(
nullptr != proxy->
findInfo( fromType ) );
277 OSL_ASSERT(
nullptr !=
findInfo( fromType ) );
287 e.
m_message, RTL_TEXTENCODING_UTF8 ).getStr() );
289 catch (System::Exception^ e)
291 System::String^ msg= gcnew System::String(
292 "An unexpected CLI exception occurred in "
293 "UnoInterfaceProxy::CanCastTo(). Original"
295 msg= System::String::Concat(msg, e->Message);
303 "An unexpected native C++ exception occurred in "
304 "UnoInterfaceProxy::CanCastTo()" );
308 System::Threading::Monitor::Exit(
this);
314 sc::IDictionary^ props,
315 srrm::LogicalCallContext^ context,
316 srrm::IMethodCallMessage^ mcm)
318 System::Object^ retMethod =
nullptr;
319 System::String^ sMethod =
static_cast<System::String^
>
321 array<System::Object^>^
args =
static_cast<array<System::Object^>^
>(
326 OSL_ASSERT(
args->Length == 1);
327 srrp::RealProxy^ rProxy = srr::RemotingServices::GetRealProxy(
args[0]);
349 int nHash =
m_oid->GetHashCode();
355 retMethod = System::Object::typeid;
360 st::StringBuilder^ sb = gcnew st::StringBuilder(256);
363 sb->AppendFormat(
"Uno object proxy. OID: {0}",
m_oid);
364 retMethod = sb->ToString();
372 srrm::IMessage^ retVal= gcnew srrm::ReturnMessage(
373 retMethod, gcnew array<System::Object^>(0), 0, context, mcm);
402 sc::IDictionary^
props= callmsg->Properties;
403 srrm::LogicalCallContext^ context=
404 static_cast<srrm::LogicalCallContext^
>(
406 srrm::IMethodCallMessage^ mcm=
407 static_cast<srrm::IMethodCallMessage^
>(callmsg);
410 System::String^ sTypeName =
static_cast<System::String^
>(
412 sTypeName = sTypeName->Substring(0, sTypeName->IndexOf(
','));
420 System::Type^ typeBeingCalled =
loadCliType(sTypeName);
422 OSL_ASSERT(
nullptr != info );
426 OUString usMethodName(
mapCliString(
static_cast<System::String^
>(
428 typelib_TypeDescriptionReference ** ppAllMembers =
430 sal_Int32 numberMembers = info->
m_typeDesc->nAllMembers;
431 for ( sal_Int32
nPos = numberMembers;
nPos--; )
433 typelib_TypeDescriptionReference * member_type = ppAllMembers[
nPos];
438 OUString
const & usTypeName =
439 OUString::unacquired( & member_type->pTypeName );
441#if OSL_DEBUG_LEVEL >= 2
442 System::String^ pTypeName;
445 sal_Int32 offset = usTypeName.indexOf(
':' ) + 2;
447 offset >= 2 && offset < usTypeName.getLength()
448 && usTypeName[offset - 1] ==
':' );
449 sal_Int32 remainder = usTypeName.getLength() - offset;
451 if (typelib_TypeClass_INTERFACE_METHOD == member_type->eTypeClass)
453 if ((usMethodName.getLength() == remainder
454 || (usMethodName.getLength() < remainder
455 && usTypeName[offset + usMethodName.getLength()] ==
':'))
456 && usTypeName.match(usMethodName, offset))
459 typelib_InterfaceMethodTypeDescription * method_td =
460 (typelib_InterfaceMethodTypeDescription *)
463 array<System::Object^>^
args =
static_cast<array<System::Object^>^
>(
465 array<System::Type^>^ argTypes =
static_cast<array<System::Type^>^
>(
467 System::Object^ pExc =
nullptr;
470 method_td->pReturnTypeRef, method_td->nParams,
471 method_td->pParams,
args, argTypes, &pExc);
478 OSL_ASSERT( typelib_TypeClass_INTERFACE_ATTRIBUTE ==
479 member_type->eTypeClass );
480 if (usMethodName.getLength() > 4
481 && (usMethodName.getLength() - 4 == remainder
482 || (usMethodName.getLength() - 4 < remainder
484 offset + (usMethodName.getLength() - 4)] ==
':'))
485 && usMethodName[1] ==
'e' && usMethodName[2] ==
't'
486 && rtl_ustr_compare_WithLength(
487 usTypeName.getStr() + offset,
488 usMethodName.getLength() - 4,
489 usMethodName.getStr() + 4,
490 usMethodName.getLength() - 4) == 0)
492 if (
'g' == usMethodName[0])
495 typelib_InterfaceAttributeTypeDescription * attribute_td =
496 (typelib_InterfaceAttributeTypeDescription*)
499 System::Object^ pExc =
nullptr;
502 attribute_td->pAttributeTypeRef,
504 nullptr,
nullptr, &pExc);
508 else if (
's' == usMethodName[0])
511 typelib_InterfaceAttributeTypeDescription * attribute_td =
512 (typelib_InterfaceAttributeTypeDescription *)
514 if (! attribute_td->bReadOnly)
516 typelib_MethodParameter param;
517 param.pTypeRef = attribute_td->pAttributeTypeRef;
521 array<System::Object^>^
args =
522 static_cast<array<System::Object^>^
>(
524 System::Object^ pExc =
nullptr;
528 1, ¶m,
args,
nullptr, &pExc);
544 throw BridgeRuntimeError(
"[cli_uno bridge]calling undeclared function on interface " +
546 ": " + usMethodName);
550 srrm::IMethodCallMessage^ mcm =
551 static_cast<srrm::IMethodCallMessage^
>(callmsg);
552 return gcnew srrm::ReturnMessage(gcnew ucss::uno::RuntimeException(
555 catch (System::Exception^ e)
557 st::StringBuilder ^ sb = gcnew st::StringBuilder(512);
558 sb->Append(gcnew System::String(
559 "An unexpected CLI exception occurred in "
560 "UnoInterfaceProxy::Invoke. Original"
562 sb->Append(e->Message);
563 sb->Append((__wchar_t)
'\n');
564 sb->Append(e->StackTrace);
565 srrm::IMethodCallMessage^ mcm =
566 static_cast<srrm::IMethodCallMessage^
>(callmsg);
567 return gcnew srrm::ReturnMessage(gcnew ucss::uno::RuntimeException(
568 sb->ToString(),
nullptr), mcm);
572 System::String^ msg = gcnew System::String(
573 "An unexpected native C++ exception occurred in "
574 "UnoInterfaceProxy::Invoke.");
575 srrm::IMethodCallMessage^ mcm =
576 static_cast<srrm::IMethodCallMessage^
>(callmsg);
577 return gcnew srrm::ReturnMessage(gcnew ucss::uno::RuntimeException(
587 System::Object^ cliReturn,
588 array<System::Object^>^ args,
589 typelib_InterfaceMethodTypeDescription* mtd,
590 srrm::IMessage^ msg, System::Object^ exc)
592 srrm::IMessage ^ retVal=
nullptr;
593 srrm::IMethodCallMessage^ mcm =
static_cast<srrm::IMethodCallMessage^
>(msg);
596 retVal = gcnew srrm::ReturnMessage(
597 dynamic_cast<System::Exception^
>(exc), mcm);
601 sc::IDictionary^
props= msg->Properties;
602 srrm::LogicalCallContext^ context=
603 static_cast<srrm::LogicalCallContext^
>(
609 array<System::Object^>^ arOut= gcnew array<System::Object^>(mtd->nParams);
611 for (
int i= 0;
i < mtd->nParams;
i++)
613 if (mtd->pParams[
i].bOut)
619 retVal= gcnew srrm::ReturnMessage(cliReturn, arOut, nOut,
625 retVal= gcnew srrm::ReturnMessage(cliReturn,
nullptr, 0,
635 const OUString& usOid):
642 m_nInheritedInterfaces(0)
653#if OSL_DEBUG_LEVEL >= 2
654 sd::Trace::WriteLine(System::String::Format(
655 gcnew System::String(
"cli uno bridge: Creating proxy for cli object, "
663#if OSL_DEBUG_LEVEL >= 2
664 System::Object^ cliI;
670 if (
m_type->IsInterface ==
false)
672 array<sr::MethodInfo^>^ arThisMethods =
m_type->GetMethods();
674 array<System::Type^>^ arInheritedIfaces =
m_type->GetInterfaces();
681 int numMethods = arThisMethods->Length;
684 numMethods += arInheritedIfaces[
i]->GetMethods()->Length;
694 for (
int i = 0;
i < numMethods;
i++)
701 System::Type^ objType =
m_cliI->GetType();
709 int nArLength = arInheritedIfaces->Length;
710 for (;nArLength > 0; nArLength--)
712 sr::InterfaceMapping mapInherited = objType->GetInterfaceMap(
713 arInheritedIfaces[nArLength - 1]);
714 int numMethods = mapInherited.TargetMethods->Length;
716 for (
int i = 0;
i < numMethods;
i++,
index++)
719 mapInherited.TargetMethods[
i]);
722 mapInherited.InterfaceMethods[
i]);
726 sr::InterfaceMapping
map = objType->GetInterfaceMap(
m_type);
727 nArLength =
map.TargetMethods->Length;
729 for (
int i = 0;
i < nArLength;
i++,
index++)
732 map.TargetMethods[
i]);
734 map.InterfaceMethods[
i]);
737 catch (System::InvalidCastException^ )
744 const OUString& usMethodName,
MethodKind methodKind)
746 sr::MethodInfo^ ret =
nullptr;
748 nUnoFunctionPos -= 3;
757 System::String^ sMethodName =
mapUnoString(usMethodName.pData);
763 sMethodName = System::String::Concat(
768 sMethodName = System::String::Concat(
777 int indexCliMethod = -1;
783 indexCliMethod = nUnoFunctionPos;
787 for (
int i = 0;
i < cMethods;
i++)
790 if (cliMethod->Equals(sMethodName))
797 if (indexCliMethod == -1)
799 throw BridgeRuntimeError(
"[cli_uno bridge] CliProxy::getMethodInfo():cli object does not implement interface method: " + usMethodName);
814#if OSL_DEBUG_LEVEL >= 2
815 sd::Trace::WriteLine(System::String::Format(
816 gcnew System::String(
817 "cli uno bridge: Destroying proxy for cli object, "
818 "id:\n\t{0}\n\t{1}\n"),
826 System::Object^ cliI,
828 const OUString& ousOid)
830 uno_Interface* proxy=
static_cast<uno_Interface*
>(
831 new CliProxy(bridge, cliI, pTD, ousOid));
834 (*bridge->
m_uno_env->registerProxyInterface)(
836 reinterpret_cast<void**
>(&proxy),
838 ousOid.pData, (typelib_InterfaceTypeDescription*) pTD);
848 struct _uno_Interface *,
849 const struct _typelib_TypeDescription *,
857 if (1 == osl_atomic_increment( &
m_ref ))
860 void * that =
const_cast< CliProxy *
>( this );
865 (typelib_InterfaceTypeDescription *)
m_unoType.get() );
866#if OSL_DEBUG_LEVEL >= 2
867 OSL_ASSERT(
this == (
void const *
const)that );
874 if (0 == osl_atomic_decrement( &
m_ref ))
919 void * uno_ret,
void * uno_args [],
uno_Any ** uno_exc )
927 switch (member_td->eTypeClass)
929 case typelib_TypeClass_INTERFACE_ATTRIBUTE:
932 sal_Int32 member_pos = ((typelib_InterfaceMemberTypeDescription *)
933 member_td)->nPosition;
934 typelib_InterfaceTypeDescription * iface_td =
935 (typelib_InterfaceTypeDescription *)proxy->
m_unoType.get();
937 member_pos < iface_td->nAllMembers,
938 "### member pos out of range!" );
939 sal_Int32 function_pos =
940 iface_td->pMapMemberIndexToFunctionIndex[ member_pos ];
942 function_pos < iface_td->nMapFunctionIndexToMemberIndex,
943 "### illegal function index!" );
947 OUString
const& usAttrName= *(rtl_uString**)&
948 ((typelib_InterfaceMemberTypeDescription*) member_td)
951 usAttrName, CliProxy::MK_GET);
955 ((typelib_InterfaceAttributeTypeDescription *)member_td)
958 uno_ret, 0, uno_exc );
962 OUString
const& usAttrName= *(rtl_uString**) &
963 ((typelib_InterfaceMemberTypeDescription*) member_td)
965 sr::MethodInfo^ info = proxy->
getMethodInfo(function_pos + 1,
966 usAttrName, CliProxy::MK_SET);
967 typelib_MethodParameter param;
969 ((typelib_InterfaceAttributeTypeDescription *)member_td)
979 0, uno_args, uno_exc );
983 case typelib_TypeClass_INTERFACE_METHOD:
985 sal_Int32 member_pos = ((typelib_InterfaceMemberTypeDescription *)
986 member_td)->nPosition;
987 typelib_InterfaceTypeDescription * iface_td =
988 (typelib_InterfaceTypeDescription *)proxy->
m_unoType.get();
990 member_pos < iface_td->nAllMembers,
991 "### member pos out of range!" );
992 sal_Int32 function_pos =
993 iface_td->pMapMemberIndexToFunctionIndex[ member_pos ];
995 function_pos < iface_td->nMapFunctionIndexToMemberIndex,
996 "### illegal function index!" );
998 switch (function_pos)
1003 *
reinterpret_cast<typelib_TypeDescriptionReference **
>(
1005 if (typelib_TypeClass_INTERFACE
1006 != demanded_td.
get()->eTypeClass)
1009 "queryInterface() call demands an INTERFACE type!");
1012 uno_Interface * pInterface = 0;
1013 (*bridge->
m_uno_env->getRegisteredInterface)(
1015 (
void **)&pInterface, proxy->
m_usOid.pData,
1016 (typelib_InterfaceTypeDescription *)demanded_td.
get() );
1018 if (0 == pInterface)
1020 System::Type^ mgdDemandedType =
1022 if (mgdDemandedType->IsInstanceOfType( proxy->
m_cliI ))
1024#if OSL_DEBUG_LEVEL > 0
1027 CliEnvHolder::g_cli_env->getObjectIdentifier(
1029 OSL_ENSURE(usOid.equals( proxy->
m_usOid ),
1030 "### different oids!");
1035 (
uno_Any *)uno_ret, &pUnoI, demanded_td.
get(), 0 );
1036 (*pUnoI->release)( pUnoI );
1048 reinterpret_cast< uno_Any *
>( uno_ret ),
1049 &pInterface, demanded_td.
get(), 0 );
1050 (*pInterface->release)( pInterface );
1065 typelib_InterfaceMethodTypeDescription * method_td =
1066 (typelib_InterfaceMethodTypeDescription *)member_td;
1067 OUString
const& usMethodName= *(rtl_uString**) &
1068 ((typelib_InterfaceMemberTypeDescription*) member_td)
1072 usMethodName, CliProxy::MK_METHOD);
1076 method_td->pReturnTypeRef, method_td->pParams,
1078 uno_ret, uno_args, uno_exc);
1087 "illegal member type description!" );
1094 css::uno::RuntimeException exc(
1095 "[cli_uno bridge error] " +
err.m_message,
1096 css::uno::Reference<
1097 css::uno::XInterface >() );
1098 css::uno::Type
const & exc_type =
cppu::UnoType<
decltype(exc)>::get();
void SAL_CALL uno_any_construct(uno_Any *pDest, void *pSource, typelib_TypeDescription *pTypeDescr, uno_AcquireFunc acquire) SAL_THROW_EXTERN_C()
void SAL_CALL uno_type_any_construct(uno_Any *pDest, void *pSource, typelib_TypeDescriptionReference *pType, uno_AcquireFunc acquire) SAL_THROW_EXTERN_C()
Object registerInterface(Object ^ obj, System::String ^ oid)
Registers a UNO object as being mapped by this bridge.
void revokeInterface(System::String ^ oid)
By revoking an interface it is declared that the respective interface has not been mapped.
typelib_TypeDescription * get() const
UnoInterfaceInfo(Bridge const *bridge, uno_Interface *unoI, typelib_InterfaceTypeDescription *td)
typelib_InterfaceTypeDescription * m_typeDesc
sc::ArrayList m_listAdditionalProxies
The list is filled with additional UnoInterfaceProxy object due to aggregation via bridges.
int m_numUnoIfaces
The number of UNO interfaces this proxy represents.
static System::String m_GetType_String
virtual srrm::IMessage Invoke(srrm::IMessage^ msg) override
RealProxy::Invoke.
int m_nlistAdditionalProxies
static System::String m_methodNameString
static System::String m_CallContextString
static srrm::IMessage constructReturnMessage(System::Object^ retVal, array< System::Object^>^ outArgs, typelib_InterfaceMethodTypeDescription *mtd, srrm::IMessage^ msg, System::Object^ exc)
If the argument args is NULL then this function is called for an attribute method (either setXXX or g...
srrm::IMessage invokeObject(sc::IDictionary^ properties, srrm::LogicalCallContext^ context, srrm::IMethodCallMessage^ mcm)
virtual bool CanCastTo(System::Type^ fromType, System::Object^ o)
static System::String m_methodSignatureString
rtl_uString * _sInterfaces
The string contains all names of UNO interfaces which are represented by this proxy.
static System::Object create(Bridge *bridge, uno_Interface *pUnoI, typelib_InterfaceTypeDescription *pTd, const OUString &oid)
Creates a proxy and registers it on the dot NET side.
static System::String m_GetHashCode_String
static System::String m_typeNameString
sc::ArrayList m_listIfaces
The list is filled with UnoInterfaceInfo objects.
void addUnoInterface(uno_Interface *pUnoI, typelib_InterfaceTypeDescription *pTd)
Must be called from within a synchronized section.
static System::String m_ToString_String
static System::String m_ArgsString
UnoInterfaceInfo findInfo(::System::Type ^ type)
static System::String m_system_Object_String
UnoInterfaceProxy(Bridge *bridge, uno_Interface *pUnoI, typelib_InterfaceTypeDescription *pTD, const OUString &oid)
static System::String m_Equals_String
css::uno::Type const & get()
void SAL_CALL cli_proxy_acquire(uno_Interface *pUnoI) SAL_THROW_EXTERN_C()
void SAL_CALL cli_proxy_free(uno_ExtEnvironment *env, void *proxy) SAL_THROW_EXTERN_C()
void SAL_CALL cli_proxy_release(uno_Interface *pUnoI) SAL_THROW_EXTERN_C()
void SAL_CALL cli_proxy_dispatch(uno_Interface *pUnoI, typelib_TypeDescription const *member_td, void *uno_ret, void *uno_args[], uno_Any **uno_exc) SAL_THROW_EXTERN_C()
std::atomic< std::size_t > m_ref
#define SAL_WARN(area, stream)
std::unique_ptr< sal_Int32[]> pData
struct _typelib_TypeDescription typelib_TypeDescription
System::Type loadCliType(System::String ^ typeName)
OUString mapCliString(System::String ^ data)
System::Type mapUnoType(typelib_TypeDescription const *pTD)
System::String mapUnoString(rtl_uString const *data)
Maps uno types to dot net types.
OString OUStringToOString(std::u16string_view str, ConnectionSettings const *settings)
std::map< OUString, rtl::Reference< Entity > > map
An instance of Bridge represents exactly one mapping therefore either m_cli2uno or m_uno2cli is valid...
System::Object call_uno(uno_Interface *pUnoI, typelib_TypeDescription *member_td, typelib_TypeDescriptionReference *return_type, sal_Int32 nParams, typelib_MethodParameter const *pParams, array< System::Object^>^ args, array< System::Type^>^ argTypes, System::Object^ *pException) const
void call_cli(System::Object^ cliI, sr::MethodInfo^ method, typelib_TypeDescriptionReference *return_type, typelib_MethodParameter *params, int nParams, void *uno_ret, void *uno_args[], uno_Any **uno_exc) const
uno_ExtEnvironment * m_uno_env
uno_Interface * map_cli2uno(System::Object^ cliI, typelib_TypeDescription *pTD) const
void acquire() const
ToDo I doubt that the case that the ref count raises from 0 to 1 can occur.
static Cli_environment g_cli_env
gcroot< array< sr::MethodInfo^>^> m_arInterfaceMethodInfos
This array is similar to m_arMethodInfos but it contains the MethodInfo objects of the interface (not...
gcroot< System::Type^> m_type
sr::MethodInfo getMethodInfo(int nUnoFunctionPos, const OUString &usMethodName, MethodKind mk)
Obtains a MethodInfo which can be used to invoke the cli object.
const gcroot< System::Object^> m_cliI
void SAL_CALL uno_DispatchMethod(struct _uno_Interface *pUnoI, const struct _typelib_TypeDescription *pMemberType, void *pReturn, void *pArgs[], uno_Any **ppException)
const gcroot< System::String^> m_oid
static uno_Interface * create(Bridge const *bridge, System::Object^ cliI, typelib_TypeDescription const *TD, OUString const &usOid)
gcroot< array< sr::MethodInfo^>^> m_arMethodInfos
The array contains MethodInfos of the cli object.
const css::uno::TypeDescription m_unoType
int m_nInheritedInterfaces
Count of inherited interfaces of the cli interface.
void makeMethodInfos()
Prepares an array (m_arMethoInfos) containing MethodInfo object of the interface and all inherited in...
gcroot< array< System::Int32 >^> m_arUnoPosToCliPos
Maps the position of the method in the UNO interface to the position of the corresponding MethodInfo ...
gcroot< array< System::Int32^>^> m_arInterfaceMethodCount
Contains the number of methods of each interface.
oslInterlockedCount m_ref
CliProxy(Bridge const *bridge, System::Object^ cliI, typelib_TypeDescription const *pTD, const OUString &usOid)
static System::String sAttributeGet
static System::String sAttributeSet
void SAL_CALL typelib_typedescription_release(typelib_TypeDescription *pTD) SAL_THROW_EXTERN_C()
void SAL_CALL typelib_typedescription_acquire(typelib_TypeDescription *pTypeDescription) SAL_THROW_EXTERN_C()
sal_Bool SAL_CALL typelib_typedescription_equals(const typelib_TypeDescription *p1, const typelib_TypeDescription *p2) SAL_THROW_EXTERN_C()
#define SAL_THROW_EXTERN_C()