Partager via


ExtensibleClassFactory Classe

Définition

Permet la personnalisation d'objets managés qui sont des extensions d'objets non managés lors de la création.

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
Héritage
ExtensibleClassFactory
Attributs

Exemples

Inscrit un delegate qui sera appelé chaque fois qu’une instance d’un type managé qui s’étend à partir d’un type non managé doit allouer l’objet non managé agrégé. Cela delegate est censé allouer et agréger l’objet non managé et est appelé à la place d’un CoCreateInstance. Cette routine doit être appelée dans le contexte de l’initialiseur static pour la classe pour laquelle les rappels seront effectués.

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

Remarques

Permet ExtensibleClassFactory aux utilisateurs de spécifier un delegate appelé lors de la construction d’un wrapper pouvant être appelé (RCW) du runtime qui fournit une instance de l’objet COM sous-jacent. En effet, le rappel fait office de fabrique de classes pour l’objet COM encapsulé par le RCW. Sans le rappel, le Common Language Runtime crée l’objet COM sous-jacent en appelant CoCreateInstance. Ce rappel offre une autre façon d’activer l’objet sous-jacent, par exemple avec un moniker COM ou en fournissant un objet singleton. La RegisterObjectCreationCallback méthode doit être appelée dans l’initialiseur static de la classe qui étend le RCW. Un seul rappel de création d’objet est autorisé par type d’objet. Lorsque le RCW extensible est activé, le rappel est inscrit. Lorsque l’objet COM sous-jacent doit être créé, le rappel est appelé pour fournir une référence à l’objet. Le rappel doit retourner un pointeur d’interface IUnknown pour l’objet de base.

Méthodes

Equals(Object)

Détermine si l'objet spécifié est égal à l'objet actuel.

(Hérité de Object)
GetHashCode()

Fait office de fonction de hachage par défaut.

(Hérité de Object)
GetType()

Obtient le Type de l'instance actuelle.

(Hérité de Object)
MemberwiseClone()

Crée une copie superficielle du Object actuel.

(Hérité de Object)
RegisterObjectCreationCallback(ObjectCreationDelegate)

Inscrit un delegate qui sera appelé chaque fois qu'une instance d'un type managé qui est une extension d'un type non managé doit allouer l'objet non managé agrégé.

ToString()

Retourne une chaîne qui représente l'objet actuel.

(Hérité de Object)

S’applique à