ExtensibleClassFactory Class
Enables customization of managed objects that extend from unmanaged objects during creation.
Assembly: mscorlib (in mscorlib.dll)
The ExtensibleClassFactory type exposes the following members.
| Name | Description | |
|---|---|---|
![]() | Equals(Object) | Determines whether the specified Object is equal to the current Object. (Inherited from Object.) |
![]() | Finalize | Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection. (Inherited from Object.) |
![]() | GetHashCode | Serves as a hash function for a particular type. (Inherited from Object.) |
![]() | GetType | Gets the Type of the current instance. (Inherited from Object.) |
![]() | MemberwiseClone | Creates a shallow copy of the current Object. (Inherited from Object.) |
![]() ![]() | RegisterObjectCreationCallback | 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. |
![]() | ToString | Returns a string that represents the current object. (Inherited from Object.) |
The ExtensibleClassFactory allows users to specify a delegate that is called during construction of a runtime callable wrapper (RCW) that provides an instance of the underlying COM object. In effect, the callback acts as the class factory for the COM object wrapped by the RCW. Without the callback, the common language runtime creates the underlying COM object by calling CoCreateInstance. This callback provides an alternative way of activating the underlying object, such as with a COM moniker or by providing a singleton object. The RegisterObjectCreationCallback method must be called in the static initializer of the class that is extending the RCW. Only one object creation callback is permitted per object type. When the extensible RCW is activated, the callback is registered. When the underlying COM object needs to be created, the callback is called to provide a reference to the object. The callback must return an IUnknown interface pointer for the base object.
Registers a delegate that will be called whenever an instance of a managed type that extends from an unmanaged type needs to allocate the aggregated unmanaged object. This delegate is expected to allocate and aggregate the unmanaged object and is called in place of a CoCreateInstance. This routine must be called in the context of the static initializer for the class for which the callbacks will be made.
public ref class CallBack { public: IntPtr Activate( IntPtr Aggregator ) { ECFSRV32Lib::ObjectActivator^ oCOM = gcnew ECFSRV32Lib::ObjectActivator; ECFSRV32Lib::IObjectActivator^ itf = dynamic_cast<ECFSRV32Lib::IObjectActivator^>(oCOM); return (IntPtr)itf->CreateBaseComponent( (int)Aggregator ); } }; // // The EcfInner class. First .NET class derived directly from COM class. // public ref class EcfInner: public ECFSRV32Lib::BaseComponent { private: static CallBack^ callbackInner; static void RegisterInner() { callbackInner = gcnew CallBack; System::Runtime::InteropServices::ExtensibleClassFactory::RegisterObjectCreationCallback( gcnew System::Runtime::InteropServices::ObjectCreationDelegate( callbackInner, &CallBack::Activate ) ); } //This is the static initializer. static EcfInner() { RegisterInner(); } };
Windows 7, Windows Vista SP1 or later, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (Server Core not supported), Windows Server 2008 R2 (Server Core supported with SP1 or later), Windows Server 2003 SP2
The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.
