Compartir a través de


Clase ExtensibleClassFactory

 

Publicado: octubre de 2016

Habilita la personalización de los objetos administrados que se extienden desde objetos no administrados durante la creación.

Espacio de nombres:   System.Runtime.InteropServices
Ensamblado:  mscorlib (en mscorlib.dll)

Jerarquía de herencia

System.Object
  System.Runtime.InteropServices.ExtensibleClassFactory

Sintaxis

[ComVisibleAttribute(true)]
public sealed class ExtensibleClassFactory
[ComVisibleAttribute(true)]
public ref class ExtensibleClassFactory sealed 
[<Sealed>]
[<ComVisibleAttribute(true)>]
type ExtensibleClassFactory = class end
<ComVisibleAttribute(True)>
Public NotInheritable Class ExtensibleClassFactory

Métodos

Nombre Descripción
System_CAPS_pubmethod Equals(Object)

Determina si el objeto especificado es igual al objeto actual.(Heredado de Object).

System_CAPS_pubmethod GetHashCode()

Sirve como la función hash predeterminada.(Heredado de Object).

System_CAPS_pubmethod GetType()

Obtiene el Type de la instancia actual.(Heredado de Object).

System_CAPS_pubmethodSystem_CAPS_static RegisterObjectCreationCallback(ObjectCreationDelegate)

Registra un delegate que se llama cuando una instancia de un tipo administrado, que se extiende desde un tipo no administrado, debe asignar el objeto no administrado agregado.

System_CAPS_pubmethod ToString()

Devuelve una cadena que representa el objeto actual.(Heredado de Object).

Comentarios

El ExtensibleClassFactory permite a los usuarios especificar un delegate que se llama durante la construcción de un contenedor invocable en tiempo de ejecución (RCW) que proporciona una instancia del objeto COM subyacente. En efecto, la devolución de llamada actúa como generador de clases para el objeto COM que el RCW contenido. Sin la devolución de llamada, common language runtime crea el objeto COM subyacente mediante una llamada a CoCreateInstance. Esta devolución de llamada proporciona una manera alternativa de activar el objeto subyacente, como con un moniker COM o al proporcionar un objeto singleton. El RegisterObjectCreationCallback método debe llamarse el static inicializador de la clase que extiende el RCW. Devolución de llamada de creación de un único objeto está permitido por el tipo de objeto. Cuando se activa el RCW extensible, se registra la devolución de llamada. Cuando es necesario crear el objeto COM subyacente, la devolución de llamada se llama para proporcionar una referencia al objeto. La devolución de llamada debe devolver un IUnknown puntero de interfaz para el objeto base.

Ejemplos

Registra un delegate que se llama cuando una instancia de un tipo administrado que se extiende desde un tipo no administrado necesite asignar el objeto no administrado agregado. Esto delegate se espera que asigne y agregue el objeto no administrado y se llama en lugar de un CoCreateInstance. Esta rutina se debe invocar en el contexto de la static inicializador de la clase para la que se realizarán las devoluciones de llamada.

using System;
using System.Runtime.InteropServices;

public class CallBack
{
   public IntPtr Activate(IntPtr Aggregator)
   {
      ECFSRV32Lib.ObjectActivator oCOM = new ECFSRV32Lib.ObjectActivator();
      ECFSRV32Lib.IObjectActivator itf = (ECFSRV32Lib.IObjectActivator)oCOM;
      return (IntPtr) itf.CreateBaseComponent((int)Aggregator);
   }
}

//
// The EcfInner class. First .NET class derived directly from COM class.
//
public class EcfInner : ECFSRV32Lib.BaseComponent
{
   static CallBack callbackInner;

   static void RegisterInner()
   {      
      callbackInner = new CallBack();
      System.Runtime.InteropServices.ExtensibleClassFactory.RegisterObjectCreationCallback(new System.Runtime.InteropServices.ObjectCreationDelegate(callbackInner.Activate));
   }

   //This is the static initializer.    
   static EcfInner()
   {
      RegisterInner();
   }
}
Imports System
Imports System.Runtime.InteropServices

Public Class CallBack

    Public Function Activate(Aggregator As IntPtr) As IntPtr
        Dim oCOM As New ECFSRV32Lib.ObjectActivator()
        Dim itf As ECFSRV32Lib.IObjectActivator = _
           CType(oCOM, ECFSRV32Lib.IObjectActivator)
        Return New IntPtr(itf.CreateBaseComponent(Aggregator.ToInt32()))
    End Function
End Class

'
' The EcfInner class. First .NET class derived directly from COM class.
'
Public Class EcfInner
    Inherits ECFSRV32Lib.BaseComponent
    Private Shared callbackInner As CallBack    

    Shared Sub RegisterInner()
        callbackInner = New CallBack()
        ExtensibleClassFactory.RegisterObjectCreationCallback( _
           New System.Runtime.InteropServices.ObjectCreationDelegate( _
           AddressOf callbackInner.Activate))
    End Sub    

    'This is the static initializer.    
    Shared Sub New()
        RegisterInner()
    End Sub
End Class
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();
   }
};

Información de versión

.NET Framework
Disponible desde 1.1

Seguridad para subprocesos

Cualquier miembro ( Compartido en Visual Basic) estático público de este tipo es seguro para subprocesos. No se garantiza que los miembros de instancia sean seguros para subprocesos.

Ver también

Espacio de nombres System.Runtime.InteropServices

Volver al principio