ExtensibleClassFactory Classe

Definição

Permite a personalização de objetos geridos que se estendem a partir de objetos não geridos 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

Registos a delegate que serão chamados sempre que uma instância de um tipo gerido que se estende a partir de um tipo não gerido precisar de alocar o objeto não gerido agregado. Espera-se que isto delegate aloque e agregue o objeto não gerido e é chamado em vez de um CoCreateInstance. Esta rotina deve ser chamada no contexto do static inicializador da classe para a qual serão feitas as chamadas de retorno.

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

Observações

Permite ExtensibleClassFactory aos utilizadores especificar um delegate que é chamado durante a construção de um wrapper chamável em tempo de execução (RCW) que fornece uma instância do objeto COM subjacente. Na prática, o callback atua como a fábrica de classes para o objeto COM envolvido pelo RCW. Sem o callback, o runtime da linguagem comum cria o objeto COM subjacente chamando CoCreateInstance. Este callback oferece uma forma 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á a estender o RCW. Apenas um callback de criação de objeto é permitido por tipo de objeto. Quando o RCW extensível é ativado, o callback é registado. Quando o objeto COM subjacente precisa de ser criado, o callback é chamado para fornecer uma referência ao objeto. O callback deve devolver um IUnknown ponteiro de interface para o objeto base.

Métodos

Name Description
Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
GetHashCode()

Serve como função de hash predefinida.

(Herdado de Object)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
MemberwiseClone()

Cria uma cópia superficial do atual Object.

(Herdado de Object)
RegisterObjectCreationCallback(ObjectCreationDelegate)

Registos a delegate que são chamados quando uma instância de um tipo gerido, que se estende a partir de um tipo não gerido, precisa de alocar o objeto não gerido agregado.

ToString()

Devolve uma cadeia que representa o objeto atual.

(Herdado de Object)

Aplica-se a