ExtensibleClassFactory Třída
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Umožňuje přizpůsobení spravovaných objektů, které se během vytváření rozšiřují z nespravovaných objektů.
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
- Dědičnost
-
ExtensibleClassFactory
- Atributy
Příklady
Zaregistruje delegate
, která bude volána vždy, když instance spravovaného typu, která se rozšiřuje z nespravovaného typu, musí přidělit agregovaný nespravovaný objekt. Očekává delegate
se, že se přidělí a agreguje nespravovaný objekt a volá se místo objektu CoCreateInstance
. Tato rutina musí být volána v kontextu static
inicializátoru pro třídu, pro kterou budou provedeny zpětné volání.
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
Poznámky
Umožňuje ExtensibleClassFactory
uživatelům určit delegate
, která je volána při vytváření obálky volatelné za běhu (RCW), která poskytuje instanci základního objektu COM. V důsledku toho zpětné volání funguje jako objekt třídy objektu COM zabaleného rcW. Bez zpětného volání vytvoří modul CLR (Common Language Runtime) základní objekt MODELU COM voláním CoCreateInstance
. Toto zpětné volání poskytuje alternativní způsob aktivace podkladového objektu, například pomocí monikeru modelu COM nebo poskytnutím objektu singleton. Metoda RegisterObjectCreationCallback musí být volána v static
inicializátor třídy, která rozšiřuje RCW. Pro každý typ objektu je povoleno pouze jedno zpětné volání vytváření objektů. Po aktivaci rozšiřitelné rcW se zpětné volání zaregistruje. Když je potřeba vytvořit podkladový objekt MODELU COM, zavolá se zpětné volání, které poskytne odkaz na objekt. Zpětné volání musí vrátit IUnknown
ukazatel rozhraní základního objektu.
Metody
Equals(Object) |
Určí, zda se zadaný objekt rovná aktuálnímu objektu. (Zděděno od Object) |
GetHashCode() |
Slouží jako výchozí funkce hash. (Zděděno od Object) |
GetType() |
Type Získá aktuální instanci. (Zděděno od Object) |
MemberwiseClone() |
Vytvoří použádnou kopii aktuálního souboru Object. (Zděděno od Object) |
RegisterObjectCreationCallback(ObjectCreationDelegate) |
Zaregistruje volanou |
ToString() |
Vrátí řetězec, který představuje aktuální objekt. (Zděděno od Object) |