public ref class UnoInterfaceProxy: public srrp::RealProxy, public srr::IRemotingTypeInfo
{ /** used for IRemotingTypeInfo.TypeName
*/
System::String^ m_sTypeName; /** The list is filled with UnoInterfaceInfo objects. The list can only growandelementsareneverchanged.Ifanelementwasaddedit mustnotbechanged!
*/
sc::ArrayList^ m_listIfaces; /** The number of UNO interfaces this proxy represents. It corresponds tothenumberofelementsinm_listIfaces.
*/ int m_numUnoIfaces; /** The list is filled with additional UnoInterfaceProxy object due toaggregationviabridges.Thoughthelatterisstrongly discouraged,thishastobesupported.
*/
sc::ArrayList^ m_listAdditionalProxies; int m_nlistAdditionalProxies;
UnoInterfaceInfo ^ findInfo( ::System::Type ^ type );
Bridge const* m_bridge;
System::String^ m_oid;
#if OSL_DEBUG_LEVEL >= 2 /** The string contains all names of UNO interfaces which are representedbythisproxy.Itisusedtoprintouttheinterfaces whenthisproxydies.Inthedestructoritisnotallowedto accessm_listIfacesoranyothermanagedobject.
*/
rtl_uString * _sInterfaces; // /** Count of interfaces. Used in conjunction with _sInterfaces. // */ int _numInterfaces; #endif
public:
/** Creates a proxy and registers it on the dot NET side.
*/ static System::Object^ create(Bridge * bridge,
uno_Interface * pUnoI,
typelib_InterfaceTypeDescription* pTd, const OUString& oid);
/** Must be called from within a synchronized section. Addonlytheinterfaceifitisnotalreadycontained. Thismethodiscalledfromtheconstructorandasaresult ofIRemotingTypeInfo::CanCastTo
*/ void addUnoInterface(uno_Interface* pUnoI,
typelib_InterfaceTypeDescription* pTd);
~UnoInterfaceProxy();
!UnoInterfaceProxy();
//Cannot make this __gc because a managed type cannot derive from unmanaged type struct CliProxy: public uno_Interface
{ mutable oslInterlockedCount m_ref; const Bridge* m_bridge; const gcroot<System::Object^> m_cliI;
gcroot<System::Type^> m_type; const css::uno::TypeDescription m_unoType; const gcroot<System::String^> m_oid; const OUString m_usOid;
enum MethodKind {MK_METHOD = 0, MK_SET, MK_GET}; /** The array contains MethodInfos of the cli object. Each one reflects an implementedinterfacemethodoftheinterfaceforwhichthisproxywas created.TheMethodInfosarefromtheobject'smethodandnotfromthe interfacetype.Thatis,theycanbeusedtoinvokethemethods.The orderoftheMethodInfoobjectscorrespondstotheorderofthe interfacemethods(seememberm_type).Position0containsthe MethodInfoofthefirstmethodoftheinterfacewhichrepresentsthe rootoftheinheritancechain.ThelastMethodInforepresentsthelast methodofthefurthestderivedinterface.
/** This array is similar to m_arMethodInfos but it contains the MethodInfo objectsoftheinterface(nottheobject).Whenacallismadefromuno toclithentheunomethodnameiscomparedtotheclimethodname.The climethodnamecanbeobtainedfromtheMethodInfoobjectinthis array.Thenameoftheactualimplementedmethodmaynotbethesameas theinterfacemethod.
*/
gcroot<array<sr::MethodInfo^>^> m_arInterfaceMethodInfos;
/** Maps the position of the method in the UNO interface to the position of thecorrespondingMethodInfoinm_arMethodInfos.TheUnopositionmust notincludetheXInterfacemethods.Forexample, pos0=XInterface::queryInterface pos1=XInterface::acquire pos2=XInterface::release
/** Count of inherited interfaces of the cli interface.
*/ int m_nInheritedInterfaces; /** Contains the number of methods of each interface.
*/
gcroot<array<System::Int32^>^> m_arInterfaceMethodCount;
/** Prepares an array (m_arMethoInfos) containing MethodInfo object of the interfaceandallinheritedinterfaces.Atindexnullisthefirst methodofthebaseinterfaceandatthelastpositionisthelastmethod ofthefurthestderivedinterface. IfaUNOcallisreceivedthenonecandeterminethepositionofthe method(orgetterorsetterforanattribute)fromthepassedtype information.Thepositionminus3(thereisnoXInterfaceinthecli mapping)correspondstotheindexofthecliinterfacemethodinthe array.
*/ void makeMethodInfos();
/**Obtains a MethodInfo which can be used to invoke the cli object. InternallyitmapsnUnoFunctionPostoanindexthatisusedtogetthe correspondingMethodInfoobjectfromm_arMethoInfos.Themappingtable isdynamicallyinitialized.Ifthecliinterfacehasnobaseinterface orexactlyonethenthemappingtableisinitializedinonegoatthe firstcall.InallensuingcallstheMethodInfoobjectisimmediately retrievedthroughthemappingtable.
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.