ExtensibleClassFactory Klasse

Definition

Ermöglicht das Anpassen verwalteter Objekte, bei denen es sich um eine Erweiterung nicht verwalteter Objekte während der Erstellung handelt.

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
Vererbung
ExtensibleClassFactory
Attribute

Beispiele

Registriert ein delegate Element, das aufgerufen wird, wenn eine Instanz eines verwalteten Typs aufgerufen wird, die sich aus einem nicht verwalteten Typ erstreckt, um das aggregierte nicht verwaltete Objekt zuzuweisen. Dies delegate wird erwartet, dass das nicht verwaltete Objekt zugewiesen und aggregiert wird und anstelle eines CoCreateInstance. Diese Routine muss im Kontext des Initializers für die static Klasse aufgerufen werden, für die die Rückrufe vorgenommen werden.

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

Hinweise

Die ExtensibleClassFactory Benutzer können eine delegate Eigenschaft angeben, die während der Konstruktion eines aufrufbaren Runtime-Wrappers (RCW) aufgerufen wird, der eine Instanz des zugrunde liegenden COM-Objekts bereitstellt. In Der Effekt fungiert der Rückruf als Klassenfabrik für das COM-Objekt, das von der RCW umschlossen wird. Ohne Rückruf erstellt die allgemeine Sprachlaufzeit das zugrunde liegende COM-Objekt durch Aufrufen CoCreateInstance. Dieser Rückruf bietet eine alternative Möglichkeit zum Aktivieren des zugrunde liegenden Objekts, z. B. mit einem COM-Moniker oder durch Bereitstellen eines Singleton-Objekts. Die RegisterObjectCreationCallback Methode muss im Initializer der Klasse aufgerufen werden, die das static RCW erweitert. Nur ein Objekterstellungsaufruf ist pro Objekttyp zulässig. Wenn die erweiterbare RCW aktiviert wird, wird der Rückruf registriert. Wenn das zugrunde liegende COM-Objekt erstellt werden muss, wird der Rückruf aufgerufen, um einen Verweis auf das Objekt bereitzustellen. Der Rückruf muss einen IUnknown Schnittstellenzeiger für das Basisobjekt zurückgeben.

Methoden

Equals(Object)

Bestimmt, ob das angegebene Objekt gleich dem aktuellen Objekt ist.

(Geerbt von Object)
GetHashCode()

Fungiert als Standardhashfunktion.

(Geerbt von Object)
GetType()

Ruft den Type der aktuellen Instanz ab.

(Geerbt von Object)
MemberwiseClone()

Erstellt eine flache Kopie des aktuellen Object.

(Geerbt von Object)
RegisterObjectCreationCallback(ObjectCreationDelegate)

Registriert einen delegate, der aufgerufen wird, wenn eine Instanz eines verwalteten Typs, der aus einem nicht verwalteten Typ erweitert wird, das aggregierte, nicht verwaltete Objekt reservieren muss.

ToString()

Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.

(Geerbt von Object)

Gilt für