ExtensibleClassFactory Класс

Определение

Включает настройку управляемых объектов, полученных из неуправляемых объектов в процессе создания.

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
Наследование
ExtensibleClassFactory
Атрибуты

Примеры

delegate Регистрирует объект, который будет вызываться всякий раз, когда экземпляр управляемого типа, расширяющегося от неуправляемого типа, должен выделить агрегированный неуправляемый объект. Ожидается, что он delegate выделяет и агрегирует неуправляемый объект и вызывается вместо объекта CoCreateInstance. Эта подпрограмма должна вызываться в контексте инициализатора static для класса, для которого будут выполняться обратные вызовы.

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

Комментарии

Позволяет ExtensibleClassFactory пользователям указать delegate , что вызывается во время создания вызываемой оболочки среды выполнения (RCW), которая предоставляет экземпляр базового COM-объекта. В действительности обратный вызов выступает в качестве фабрики классов для COM-объекта, упаковаемого rcW. Без обратного вызова среда CLR создает базовый COM-объект путем вызова CoCreateInstance. Этот обратный вызов предоставляет альтернативный способ активации базового объекта, например с моникером COM или путем предоставления одноэлементного объекта. Метод RegisterObjectCreationCallback должен вызываться в static инициализаторе класса, расширяющего RCW. Для каждого типа объекта допускается только один обратный вызов создания объекта. При активации расширяемого RCW обратный вызов регистрируется. При создании базового COM-объекта вызывается обратный вызов для предоставления ссылки на объект. Обратный IUnknown вызов должен возвращать указатель интерфейса для базового объекта.

Методы

Equals(Object)

Определяет, равен ли указанный объект текущему объекту.

(Унаследовано от Object)
GetHashCode()

Служит хэш-функцией по умолчанию.

(Унаследовано от Object)
GetType()

Возвращает объект Type для текущего экземпляра.

(Унаследовано от Object)
MemberwiseClone()

Создает неполную копию текущего объекта Object.

(Унаследовано от Object)
RegisterObjectCreationCallback(ObjectCreationDelegate)

Регистрирует delegate, который будет вызываться всякий раз, когда экземпляру управляемого типа, расширенному из неуправляемого типа, понадобится разместить сводный неуправляемый объект.

ToString()

Возвращает строку, представляющую текущий объект.

(Унаследовано от Object)

Применяется к