ExtensibleClassFactory Klasse
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
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 eine delegate
, die immer dann aufgerufen wird, wenn eine Instanz eines verwalteten Typs, der von einem nicht verwalteten Typ ausgeht, das aggregierte nicht verwaltete Objekt zuordnen muss. Dies delegate
wird erwartet, dass das nicht verwaltete Objekt zugeordnet und aggregiert wird, und wird anstelle von CoCreateInstance
aufgerufen. Diese Routine muss im Kontext des static
Initialisierers für die Klasse aufgerufen werden, für die die Rückrufe durchgeführt 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
ExtensibleClassFactory
Mit können Benutzer eine delegate
angeben, die beim Erstellen eines runtime callable wrappers (RCW) aufgerufen wird, der eine Instanz des zugrunde liegenden COM-Objekts bereitstellt. Tatsächlich fungiert der Rückruf als Klassenfactory für das COM-Objekt, das vom RCW umschlossen wird. Ohne den Rückruf erstellt die Common Language Runtime das zugrunde liegende COM-Objekt, indem sie aufruft 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 Singletonobjekts. Die RegisterObjectCreationCallback -Methode muss im static
Initialisierer der Klasse aufgerufen werden, die die RCW erweitert. Pro Objekttyp ist nur ein Rückruf zur Objekterstellung zulässig. Wenn der 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 |
ToString() |
Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt. (Geerbt von Object) |