ExtensibleClassFactory Clase
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Permite personalizar objetos administrados que se extienden a partir de objetos no administrados durante su creación.
public ref class ExtensibleClassFactory sealed
public sealed class ExtensibleClassFactory
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class ExtensibleClassFactory
type ExtensibleClassFactory = class
[<System.Runtime.InteropServices.ComVisible(true)>]
type ExtensibleClassFactory = class
Public NotInheritable Class ExtensibleClassFactory
- Herencia
-
ExtensibleClassFactory
- Atributos
Ejemplos
Registra un delegate
objeto al que se llamará cada vez que una instancia de un tipo administrado que se extiende desde un tipo no administrado debe asignar el objeto no administrado agregado. Se espera que esto delegate
asigne y agregue el objeto no administrado y se llama a en lugar de .CoCreateInstance
Se debe llamar a esta rutina en el contexto del static
inicializador para la clase para la que se realizarán las devoluciones de llamada.
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();
}
};
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.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
Comentarios
ExtensibleClassFactory
permite a los usuarios especificar un delegate
objeto al 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 el generador de clases para el objeto COM encapsulado por el RCW. 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 forma alternativa de activar el objeto subyacente, como con un moniker COM o proporcionando un objeto singleton. Se RegisterObjectCreationCallback debe llamar al método en el static
inicializador de la clase que extiende el RCW. Solo se permite una devolución de llamada de creación de objetos por tipo de objeto. Cuando se activa el RCW extensible, se registra la devolución de llamada. Cuando es necesario crear el objeto COM subyacente, se llama a la devolución de llamada para proporcionar una referencia al objeto . La devolución de llamada debe devolver un IUnknown
puntero de interfaz para el objeto base.
Métodos
Equals(Object) |
Determina si el objeto especificado es igual que el objeto actual. (Heredado de Object) |
GetHashCode() |
Sirve como la función hash predeterminada. (Heredado de Object) |
GetType() |
Obtiene el Type de la instancia actual. (Heredado de Object) |
MemberwiseClone() |
Crea una copia superficial del Object actual. (Heredado de Object) |
RegisterObjectCreationCallback(ObjectCreationDelegate) |
Registra un |
ToString() |
Devuelve una cadena que representa el objeto actual. (Heredado de Object) |