using System; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using Mono.Interop; namespace System { // Token: 0x020006C3 RID: 1731 internal class __ComObject : MarshalByRefObject { // Token: 0x06004184 RID: 16772 RVA: 0x000DE718 File Offset: 0x000DC918 public __ComObject() { this.Initialize(base.GetType()); } // Token: 0x06004185 RID: 16773 RVA: 0x000DE72C File Offset: 0x000DC92C internal __ComObject(Type t) { this.Initialize(t); } // Token: 0x06004186 RID: 16774 RVA: 0x000DE73C File Offset: 0x000DC93C internal __ComObject(IntPtr pItf) { Guid iid_IUnknown = __ComObject.IID_IUnknown; int num = Marshal.QueryInterface(pItf, ref iid_IUnknown, out this.iunknown); Marshal.ThrowExceptionForHR(num); } // Token: 0x06004187 RID: 16775 [MethodImpl(MethodImplOptions.InternalCall)] internal static extern __ComObject CreateRCW(Type t); // Token: 0x06004188 RID: 16776 [MethodImpl(MethodImplOptions.InternalCall)] private extern void ReleaseInterfaces(); // Token: 0x06004189 RID: 16777 RVA: 0x000DE76C File Offset: 0x000DC96C ~__ComObject() { this.ReleaseInterfaces(); } // Token: 0x0600418A RID: 16778 RVA: 0x000DE7A8 File Offset: 0x000DC9A8 internal void Initialize(Type t) { if (this.iunknown != IntPtr.Zero) { return; } ObjectCreationDelegate objectCreationCallback = ExtensibleClassFactory.GetObjectCreationCallback(t); if (objectCreationCallback != null) { this.iunknown = objectCreationCallback(IntPtr.Zero); if (this.iunknown == IntPtr.Zero) { throw new COMException(string.Format("ObjectCreationDelegate for type {0} failed to return a valid COM object", t)); } } else { int num = __ComObject.CoCreateInstance(__ComObject.GetCLSID(t), IntPtr.Zero, 21U, __ComObject.IID_IUnknown, out this.iunknown); Marshal.ThrowExceptionForHR(num); } } // Token: 0x0600418B RID: 16779 RVA: 0x000DE838 File Offset: 0x000DCA38 private static Guid GetCLSID(Type t) { if (t.IsImport) { return t.GUID; } for (Type type = t.BaseType; type != typeof(object); type = type.BaseType) { if (type.IsImport) { return type.GUID; } } throw new COMException("Could not find base COM type for type " + t.ToString()); } // Token: 0x0600418C RID: 16780 [MethodImpl(MethodImplOptions.InternalCall)] internal extern IntPtr GetInterfaceInternal(Type t, bool throwException); // Token: 0x0600418D RID: 16781 RVA: 0x000DE8A4 File Offset: 0x000DCAA4 internal IntPtr GetInterface(Type t, bool throwException) { this.CheckIUnknown(); return this.GetInterfaceInternal(t, throwException); } // Token: 0x0600418E RID: 16782 RVA: 0x000DE8B4 File Offset: 0x000DCAB4 internal IntPtr GetInterface(Type t) { return this.GetInterface(t, true); } // Token: 0x0600418F RID: 16783 RVA: 0x000DE8C0 File Offset: 0x000DCAC0 private void CheckIUnknown() { if (this.iunknown == IntPtr.Zero) { throw new InvalidComObjectException("COM object that has been separated from its underlying RCW cannot be used."); } } // Token: 0x17000C13 RID: 3091 // (get) Token: 0x06004190 RID: 16784 RVA: 0x000DE8F0 File Offset: 0x000DCAF0 internal IntPtr IUnknown { get { if (this.iunknown == IntPtr.Zero) { throw new InvalidComObjectException("COM object that has been separated from its underlying RCW cannot be used."); } return this.iunknown; } } // Token: 0x17000C14 RID: 3092 // (get) Token: 0x06004191 RID: 16785 RVA: 0x000DE924 File Offset: 0x000DCB24 internal IntPtr IDispatch { get { IntPtr @interface = this.GetInterface(typeof(IDispatch)); if (@interface == IntPtr.Zero) { throw new InvalidComObjectException("COM object that has been separated from its underlying RCW cannot be used."); } return @interface; } } // Token: 0x17000C15 RID: 3093 // (get) Token: 0x06004192 RID: 16786 RVA: 0x000DE960 File Offset: 0x000DCB60 internal static Guid IID_IUnknown { get { return new Guid("00000000-0000-0000-C000-000000000046"); } } // Token: 0x17000C16 RID: 3094 // (get) Token: 0x06004193 RID: 16787 RVA: 0x000DE96C File Offset: 0x000DCB6C internal static Guid IID_IDispatch { get { return new Guid("00020400-0000-0000-C000-000000000046"); } } // Token: 0x06004194 RID: 16788 RVA: 0x000DE978 File Offset: 0x000DCB78 public override bool Equals(object obj) { this.CheckIUnknown(); if (obj == null) { return false; } __ComObject _ComObject = obj as __ComObject; return _ComObject != null && this.iunknown == _ComObject.IUnknown; } // Token: 0x06004195 RID: 16789 RVA: 0x000DE9B4 File Offset: 0x000DCBB4 public override int GetHashCode() { this.CheckIUnknown(); return this.iunknown.ToInt32(); } // Token: 0x06004196 RID: 16790 [DllImport("ole32.dll", CallingConvention = CallingConvention.StdCall, ExactSpelling = true)] private static extern int CoCreateInstance([MarshalAs(UnmanagedType.LPStruct)] [In] Guid rclsid, IntPtr pUnkOuter, uint dwClsContext, [MarshalAs(UnmanagedType.LPStruct)] [In] Guid riid, out IntPtr pUnk); // Token: 0x04001A42 RID: 6722 private IntPtr iunknown; // Token: 0x04001A43 RID: 6723 private IntPtr hash_table; } }