ExtensibleClassFactory Classe

Definizione

Consente la personalizzazione di oggetti gestiti estesi da oggetti non gestiti durante la creazione.Enables customization of managed objects that extend from unmanaged objects during creation.

public ref class ExtensibleClassFactory sealed
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class ExtensibleClassFactory
type ExtensibleClassFactory = class
Public NotInheritable Class ExtensibleClassFactory
Ereditarietà
ExtensibleClassFactory
Attributi

Esempi

Registra un 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.Registers a delegate that will be called whenever an instance of a managed type that extends from an unmanaged type needs to allocate the aggregated unmanaged object. Si prevede di allocare e aggregare l'oggetto non gestito e viene chiamato al posto CoCreateInstancedi. delegateThis delegate is expected to allocate and aggregate the unmanaged object and is called in place of a CoCreateInstance. Questa routine deve essere chiamata nel contesto dell' static inizializzatore per la classe per cui verranno eseguiti i callback.This routine must be called in the context of the static initializer for the class for which the callbacks will be made.

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

Consente agli utenti di specificare un delegate che viene chiamato durante la costruzione di un Runtime Callable Wrapper (RCW) che fornisce un'istanza dell'oggetto COM sottostante. ExtensibleClassFactoryThe ExtensibleClassFactory allows users to specify a delegate that is called during construction of a runtime callable wrapper (RCW) that provides an instance of the underlying COM object. Il callback funge in effetti da class factory per l'oggetto COM di cui è stato eseguito il wrapper dall'RCW.In effect, the callback acts as the class factory for the COM object wrapped by the RCW. Senza il callback, il Common Language Runtime crea l'oggetto COM sottostante chiamando CoCreateInstance.Without the callback, the common language runtime creates the underlying COM object by calling CoCreateInstance. Questo callback fornisce un metodo alternativo per attivare l'oggetto sottostante, ad esempio con un moniker COM o fornendo un oggetto singleton.This callback provides an alternative way of activating the underlying object, such as with a COM moniker or by providing a singleton object. Il RegisterObjectCreationCallback metodo deve essere chiamato static nell'inizializzatore della classe che sta estendendo l'RCW.The RegisterObjectCreationCallback method must be called in the static initializer of the class that is extending the RCW. È consentito un solo callback per la creazione di oggetti per tipo di oggetto.Only one object creation callback is permitted per object type. Quando l'RCW estendibile viene attivato, il callback viene registrato.When the extensible RCW is activated, the callback is registered. Quando è necessario creare l'oggetto COM sottostante, viene chiamato il callback per fornire un riferimento all'oggetto.When the underlying COM object needs to be created, the callback is called to provide a reference to the object. Il callback deve restituire un IUnknown puntatore a interfaccia per l'oggetto di base.The callback must return an IUnknown interface pointer for the base object.

Metodi

Equals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente.Determines whether the specified object is equal to the current object.

(Ereditato da Object)
GetHashCode()

Funge da funzione hash predefinita.Serves as the default hash function.

(Ereditato da Object)
GetType()

Ottiene l'oggetto Type dell'istanza corrente.Gets the Type of the current instance.

(Ereditato da Object)
MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.Creates a shallow copy of the current Object.

(Ereditato da Object)
RegisterObjectCreationCallback(ObjectCreationDelegate)

Registra un oggetto delegate che verrà chiamato quando un'istanza di un tipo gestito estesa da un tipo non gestito deve allocare l'oggetto aggregato non gestito.Registers a delegate that is called when an instance of a managed type, that extends from an unmanaged type, needs to allocate the aggregated unmanaged object.

ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.Returns a string that represents the current object.

(Ereditato da Object)

Si applica a