Freigeben über


ExtensibleClassFactory-Klasse

 

Veröffentlicht: Oktober 2016

Ermöglicht die Anpassung von verwalteten Objekten, die während der Erstellung von nicht verwalteten Objekten zu erweitern.

Namespace:   System.Runtime.InteropServices
Assembly:  mscorlib (in mscorlib.dll)

Vererbungshierarchie

System.Object
  System.Runtime.InteropServices.ExtensibleClassFactory

Syntax

[ComVisibleAttribute(true)]
public sealed class ExtensibleClassFactory
[ComVisibleAttribute(true)]
public ref class ExtensibleClassFactory sealed 
[<Sealed>]
[<ComVisibleAttribute(true)>]
type ExtensibleClassFactory = class end
<ComVisibleAttribute(True)>
Public NotInheritable Class ExtensibleClassFactory

Methoden

Name Beschreibung
System_CAPS_pubmethod Equals(Object)

Bestimmt, ob das angegebene Objekt mit dem aktuellen Objekt identisch ist.(Geerbt von „Object“.)

System_CAPS_pubmethod GetHashCode()

Fungiert als die Standardhashfunktion.(Geerbt von „Object“.)

System_CAPS_pubmethod GetType()

Ruft den Type der aktuellen Instanz ab.(Geerbt von „Object“.)

System_CAPS_pubmethodSystem_CAPS_static RegisterObjectCreationCallback(ObjectCreationDelegate)

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

System_CAPS_pubmethod ToString()

Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.(Geerbt von „Object“.)

Hinweise

Die ExtensibleClassFactory ermöglicht Benutzern das Angeben einer delegate die während der Erstellung der einen Runtime callable Wrapper (RCW), die eine Instanz des zugrunde liegenden COM-Objekts aufgerufen wird. Tatsächlich wirkt der Rückruf als ClassFactory für das COM-Objekt, das vom RCW umschlossen wird. Ohne den Rückruf erstellt die common Language Runtime das zugrunde liegende COM-Objekt durch Aufrufen von CoCreateInstance. Dieser Rückruf stellt eine alternative Möglichkeit, aktivieren Sie das zugrunde liegende Objekt, z. B. mit einem COM-Moniker oder durch Bereitstellen eines Singleton-Objekts. Die RegisterObjectCreationCallback -Methode muss aufgerufen werden, das static Initialisierung der Klasse, die den RCW erweitert. Pro Typ ist nur ein Objekt Rückruf zulässig. Wenn der erweiterbare RCW aktiviert ist, 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 zurückgeben muss ein IUnknown -Schnittstellenzeiger für das Basisobjekt.

Beispiele

Registriert eine delegate die aufgerufen wird, wenn eine Instanz eines verwalteten Typs, der von einem nicht verwalteten Typ erweitert das aggregierte, nicht verwaltete Objekt zugewiesen werden muss. Diese delegate ist zu erwarten, die nicht verwaltete Objekt reservieren und aggregieren und wird anstelle des Namens einer CoCreateInstance. Diese Routine muss aufgerufen werden, im Rahmen der static Initialisierer für die Klasse, für die die Rückrufe durchgeführt werden.

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
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
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();
   }
};

Versionsinformationen

.NET Framework
Verfügbar seit 1.1

Threadsicherheit

Alle öffentlichen statischen Member ( Shared in Visual Basic) dieses Typs sind threadsicher. Die Threadsicherheit für Instanzmember ist nicht garantiert.

Siehe auch

System.Runtime.InteropServices-Namespace

Zurück zum Anfang