using System; using System.Collections; using System.Diagnostics; using System.Reflection; namespace System.Runtime.InteropServices { /// Enables customization of managed objects that extend from unmanaged objects during creation. // Token: 0x02000310 RID: 784 [ComVisible(true)] public sealed class ExtensibleClassFactory { // Token: 0x060021F5 RID: 8693 RVA: 0x00079448 File Offset: 0x00077648 private ExtensibleClassFactory() { } // Token: 0x060021F7 RID: 8695 RVA: 0x0007945C File Offset: 0x0007765C internal static ObjectCreationDelegate GetObjectCreationCallback(Type t) { return ExtensibleClassFactory.hashtable[t] as ObjectCreationDelegate; } /// Registers a delegate that is called when an instance of a managed type, that extends from an unmanaged type, needs to allocate the aggregated unmanaged object. /// A delegate that is called in place of CoCreateInstance. // Token: 0x060021F8 RID: 8696 RVA: 0x00079470 File Offset: 0x00077670 public static void RegisterObjectCreationCallback(ObjectCreationDelegate callback) { int i = 1; StackTrace stackTrace = new StackTrace(false); while (i < stackTrace.FrameCount) { StackFrame frame = stackTrace.GetFrame(i); MethodBase method = frame.GetMethod(); if (method.MemberType == MemberTypes.Constructor && method.IsStatic) { ExtensibleClassFactory.hashtable.Add(method.DeclaringType, callback); return; } i++; } throw new InvalidOperationException("RegisterObjectCreationCallback must be called from .cctor of class derived from ComImport type."); } // Token: 0x04000D18 RID: 3352 private static Hashtable hashtable = new Hashtable(); } }