ExtensibleClassFactory Klas
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Hiermee kunt u beheerde objecten aanpassen die zich tijdens het maken uitbreiden van niet-beheerde objecten.
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
- Overname
-
ExtensibleClassFactory
- Kenmerken
Voorbeelden
Registreert een delegate die wordt aangeroepen wanneer een exemplaar van een beheerd type dat uitbreidt van een niet-beheerd type het geaggregeerde onbeheerde object moet toewijzen. Dit delegate wordt verwacht om het onbeheerde object toe te wijzen en samen te voegen en wordt aangeroepen in plaats van een CoCreateInstance. Deze routine moet worden aangeroepen in de context van de static initialisatiefunctie voor de klasse waarvoor de callbacks worden gemaakt.
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
Opmerkingen
Hiermee ExtensibleClassFactory kunnen gebruikers een delegate aanroepbare wrapper (RCW) opgeven die wordt aangeroepen tijdens de bouw van een aanroepbare wrapper (RCW) die een exemplaar van het onderliggende COM-object biedt. In feite fungeert de callback als de klassefactory voor het COM-object dat is verpakt door de RCW. Zonder de callback maakt de algemene taalruntime het onderliggende COM-object door aan te roepen CoCreateInstance. Deze callback biedt een alternatieve manier om het onderliggende object te activeren, zoals met een COM-moniker of door een singleton-object op te geven. De RegisterObjectCreationCallback methode moet worden aangeroepen in de static initialisatiefunctie van de klasse die de RCW uitbreidt. Er is slechts één callback voor het maken van objecten toegestaan per objecttype. Wanneer de uitbreidbare RCW wordt geactiveerd, wordt de callback geregistreerd. Wanneer het onderliggende COM-object moet worden gemaakt, wordt de callback aangeroepen om een verwijzing naar het object op te geven. De callback moet een IUnknown interfaceaanwijzer retourneren voor het basisobject.
Methoden
| Name | Description |
|---|---|
| Equals(Object) |
Bepaalt of het opgegeven object gelijk is aan het huidige object. (Overgenomen van Object) |
| GetHashCode() |
Fungeert als de standaardhashfunctie. (Overgenomen van Object) |
| GetType() |
Hiermee haalt u de Type huidige instantie op. (Overgenomen van Object) |
| MemberwiseClone() |
Hiermee maakt u een ondiepe kopie van de huidige Object. (Overgenomen van Object) |
| RegisterObjectCreationCallback(ObjectCreationDelegate) |
Registreert een |
| ToString() |
Retourneert een tekenreeks die het huidige object vertegenwoordigt. (Overgenomen van Object) |