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) |
Регистрирует |
ToString() |
Возвращает строку, представляющую текущий объект. (Унаследовано от Object) |