Поделиться через


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)

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