Dieser Artikel wurde noch nicht bewertet - Dieses Thema bewerten.

ExtensibleClassFactory-Klasse

Aktualisiert: November 2007

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

Namespace:  System.Runtime.InteropServices
Assembly:  mscorlib (in mscorlib.dll)
[ComVisibleAttribute(true)]
public sealed class ExtensibleClassFactory
/** @attribute ComVisibleAttribute(true) */
public final class ExtensibleClassFactory
public final class ExtensibleClassFactory

ExtensibleClassFactory ermöglicht Benutzern das Angeben eines delegate, der während der Erstellung eines RCW (Runtime Callable Wrapper) aufgerufen wird, der eine Instanz des zugrunde liegenden COM-Objekts bereitstellt. Tatsächlich wirkt der Rückruf als ClassFactory für das COM-Objekt, das vom RCW umfasst 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 zum Aktivieren des zugrunde liegenden Objekts dar, z. B. mit einem COM-Moniker oder durch Bereitstellen eines Singletonobjekts. Die RegisterObjectCreationCallback-Methode muss in der static-Initialisierung der Klasse aufgerufen werden, die den RCW erweitert. Pro Objekttyp ist nur ein Rückruf bei der Objekterstellung 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 muss einen IUnknown-Schnittstellenzeiger für das Basisobjekt zurückgeben.

Registriert einen delegate, der immer dann aufgerufen wird, wenn eine Instanz eines verwalteten Typs, der aus einem nicht verwalteten Typ erweitert wurde, das aggregierte, nicht verwaltete Objekt reservieren soll. Dieser delegate soll das nicht verwaltete Objekt reservieren und aggregieren und wird anstelle einer CoCreateInstance aufgerufen. Diese Routine muss im Kontext der static-Initialisierung für die Klasse aufgerufen werden, 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();
   }
}


package ECFSRV32Lib;

import System.*;
import System.Runtime.InteropServices.*;

public class CallBack
{
    public IntPtr Activate(IntPtr Aggregator)
    {
        ECFSRV32Lib.ObjectActivator oCOM = new ECFSRV32Lib.ObjectActivator();
        ECFSRV32Lib.IObjectActivator iTf= (ECFSRV32Lib.IObjectActivator)(oCOM);
        return (new IntPtr(iTf.CreateBaseComponent((Aggregator).ToInt32())));
    } //Activate
} //CallBack

//
// The EcfInner class. First .NET class derived directly from COM class.
//
public class EcfInner extends ECFSRV32Lib.BaseComponent
{
    private static CallBack callbackInner;

    static void RegisterInner()
    {
        callbackInner = new CallBack();
        System.Runtime.InteropServices.ExtensibleClassFactory.
            RegisterObjectCreationCallback(new System.Runtime.
            InteropServices.ObjectCreationDelegate(callbackInner.Activate));
    } //RegisterInner

   //This is the static initializer.    
    static 
    {
        RegisterInner();
    } //EcfInner
} //EcfInner


System.Object
  System.Runtime.InteropServices.ExtensibleClassFactory
Alle öffentlichen static (Shared in Visual Basic)-Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.

Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework und .NET Compact Framework unterstützen nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.

.NET Framework

Unterstützt in: 3.5, 3.0, 2.0, 1.1, 1.0
Fanden Sie dies hilfreich?
(1500 verbleibende Zeichen)

Community-Beiträge

HINZUFÜGEN
© 2013 Microsoft. Alle Rechte vorbehalten.