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.
Assembly: mscorlib (in mscorlib.dll)
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
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.