Partilhar via


ExtensibleClassFactory Classe

Definição

Permite a personalização de objetos gerenciados que se estendem de objetos não gerenciados durante a criação.

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
Herança
ExtensibleClassFactory
Atributos

Exemplos

Registra um delegate que será chamado sempre que uma instância de um tipo gerenciado que se estende de um tipo não gerenciado precisar alocar o objeto não gerenciado agregado. delegate Espera-se que isso aloque e agregue o objeto não gerenciado e é chamado no lugar de um CoCreateInstance. Essa rotina deve ser chamada no contexto do static inicializador para a classe para a qual os retornos de chamada serão feitos.

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

Comentários

O ExtensibleClassFactory permite que os usuários especifiquem um delegate chamado durante a construção de um RCW (runtime Callable Wrapper) que fornece uma instância do objeto COM subjacente. Na verdade, o retorno de chamada atua como a fábrica de classes para o objeto COM encapsulado pelo RCW. Sem o retorno de chamada, o Common Language Runtime cria o objeto COM subjacente chamando CoCreateInstance. Esse retorno de chamada fornece uma maneira alternativa de ativar o objeto subjacente, como com um moniker COM ou fornecendo um objeto singleton. O RegisterObjectCreationCallback método deve ser chamado no static inicializador da classe que está estendendo o RCW. Somente um retorno de chamada de criação de objeto é permitido por tipo de objeto. Quando o RCW extensível é ativado, o retorno de chamada é registrado. Quando o objeto COM subjacente precisa ser criado, o retorno de chamada é chamado para fornecer uma referência ao objeto . O retorno de chamada deve retornar um IUnknown ponteiro de interface para o objeto base.

Métodos

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
GetHashCode()

Serve como a função de hash padrão.

(Herdado de Object)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
MemberwiseClone()

Cria uma cópia superficial do Object atual.

(Herdado de Object)
RegisterObjectCreationCallback(ObjectCreationDelegate)

Registra um delegate que é chamado quando uma instância de um tipo gerenciado, que se estende de um tipo não gerenciado, precisa alocar o objeto não gerenciado agregado.

ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.

(Herdado de Object)

Aplica-se a