ExtensibleClassFactory Classe

Definizione

Abilita la personalizzazione di oggetti gestiti che si estendono da oggetti non gestiti durante la creazione.

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
Ereditarietà
ExtensibleClassFactory
Attributi

Esempio

Registra un oggetto delegate che verrà chiamato ogni volta che un'istanza di un tipo gestito che si estende da un tipo non gestito deve allocare l'oggetto non gestito aggregato. Si prevede di delegate allocare e aggregare l'oggetto non gestito e viene chiamato al posto di un oggetto CoCreateInstance. Questa routine deve essere chiamata nel contesto dell'inizializzatore static per la classe per cui verranno eseguiti i callback.

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

Commenti

ExtensibleClassFactory Consente agli utenti di specificare un delegate oggetto chiamato durante la costruzione di un wrapper chiamabile in fase di esecuzione (RCW) che fornisce un'istanza dell'oggetto COM sottostante. In effetti, il callback funge da class factory per l'oggetto COM di cui è stato eseguito il wrapping da RCW. Senza il callback, Common Language Runtime crea l'oggetto COM sottostante chiamando CoCreateInstance. Questo callback offre un modo alternativo di attivare l'oggetto sottostante, ad esempio con un moniker COM o fornendo un oggetto singleton. Il RegisterObjectCreationCallback metodo deve essere chiamato nell'inizializzatore static della classe che estende l'RCW. Per ogni tipo di oggetto è consentito un callback per la creazione di oggetti. Quando l'RCW estendibile viene attivato, il callback viene registrato. Quando è necessario creare l'oggetto COM sottostante, viene chiamato il callback per fornire un riferimento all'oggetto . Il callback deve restituire un IUnknown puntatore di interfaccia per l'oggetto di base.

Metodi

Nome Descrizione
Equals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente.

(Ereditato da Object)
GetHashCode()

Funge da funzione hash predefinita.

(Ereditato da Object)
GetType()

Ottiene il Type dell'istanza corrente.

(Ereditato da Object)
MemberwiseClone()

Crea una copia superficiale del Objectcorrente.

(Ereditato da Object)
RegisterObjectCreationCallback(ObjectCreationDelegate)

Registra un delegate oggetto chiamato quando un'istanza di un tipo gestito, che si estende da un tipo non gestito, deve allocare l'oggetto non gestito aggregato.

ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.

(Ereditato da Object)

Si applica a