Udostępnij za pośrednictwem


ExtensibleClassFactory Klasa

Definicja

Umożliwia dostosowywanie obiektów zarządzanych, które rozciągają się od niezarządzanych obiektów podczas tworzenia.

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
Dziedziczenie
ExtensibleClassFactory
Atrybuty

Przykłady

Rejestruje obiekt delegate , który będzie wywoływany za każdym razem, gdy wystąpienie typu zarządzanego, które rozciąga się od typu niezarządzanego, musi przydzielić zagregowany niezarządzany obiekt. Jest to delegate oczekiwane przydzielenie i agregowanie niezarządzanego obiektu i jest wywoływane zamiast CoCreateInstanceobiektu . Ta procedura musi być wywoływana w kontekście inicjatora static dla klasy, dla której zostaną wykonane wywołania zwrotne.

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

Uwagi

Element ExtensibleClassFactory umożliwia użytkownikom określenie delegate , który jest wywoływany podczas budowy otoki wywoływanej przez środowisko uruchomieniowe (RCW), która udostępnia wystąpienie bazowego obiektu COM. W efekcie wywołanie zwrotne działa jako fabryka klas dla obiektu COM opakowanego przez RCW. Bez wywołania zwrotnego środowisko uruchomieniowe języka wspólnego tworzy bazowy obiekt COM przez wywołanie metody CoCreateInstance. To wywołanie zwrotne zapewnia alternatywny sposób aktywowania obiektu bazowego, na przykład za pomocą monikera COM lub przez udostępnienie pojedynczego obiektu. Metoda musi być wywoływana RegisterObjectCreationCallback w static inicjatorze klasy rozszerzającej RCW. Na typ obiektu dozwolony jest tylko jeden wywołanie zwrotne tworzenia obiektu. Po aktywowaniu rozszerzalnej wersji RCW wywołanie zwrotne jest rejestrowane. Po utworzeniu bazowego obiektu COM wywołanie zwrotne jest wywoływane w celu dostarczenia odwołania do obiektu. Wywołanie zwrotne musi zwrócić IUnknown wskaźnik interfejsu dla obiektu podstawowego.

Metody

Equals(Object)

Określa, czy dany obiekt jest taki sam, jak bieżący obiekt.

(Odziedziczone po Object)
GetHashCode()

Służy jako domyślna funkcja skrótu.

(Odziedziczone po Object)
GetType()

Type Pobiera wartość bieżącego wystąpienia.

(Odziedziczone po Object)
MemberwiseClone()

Tworzy płytkią kopię bieżącego Objectelementu .

(Odziedziczone po Object)
RegisterObjectCreationCallback(ObjectCreationDelegate)

Rejestruje obiekt delegate , który jest wywoływany, gdy wystąpienie typu zarządzanego, które rozciąga się od typu niezarządzanego, musi przydzielić zagregowany niezarządzany obiekt.

ToString()

Zwraca ciąg reprezentujący bieżący obiekt.

(Odziedziczone po Object)

Dotyczy