ExtensibleClassFactory Classe
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Permite a personalização de objetos gerenciados que se estendem de objetos não gerenciados durante a criação.
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
- Herança
-
ExtensibleClassFactory
- Atributos
Exemplos
Registra um delegate
que será chamado sempre que uma instância de um tipo gerenciado que se estende de um tipo não gerenciado precisar alocar o objeto não gerenciado agregado.
delegate
Espera-se que isso aloque e agregue o objeto não gerenciado e é chamado no lugar de um CoCreateInstance
. Essa rotina deve ser chamada no contexto do static
inicializador para a classe para a qual os retornos de chamada serão feitos.
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
Comentários
O ExtensibleClassFactory
permite que os usuários especifiquem um delegate
chamado durante a construção de um RCW (runtime Callable Wrapper) que fornece uma instância do objeto COM subjacente. Na verdade, o retorno de chamada atua como a fábrica de classes para o objeto COM encapsulado pelo RCW. Sem o retorno de chamada, o Common Language Runtime cria o objeto COM subjacente chamando CoCreateInstance
. Esse retorno de chamada fornece uma maneira alternativa de ativar o objeto subjacente, como com um moniker COM ou fornecendo um objeto singleton. O RegisterObjectCreationCallback método deve ser chamado no static
inicializador da classe que está estendendo o RCW. Somente um retorno de chamada de criação de objeto é permitido por tipo de objeto. Quando o RCW extensível é ativado, o retorno de chamada é registrado. Quando o objeto COM subjacente precisa ser criado, o retorno de chamada é chamado para fornecer uma referência ao objeto . O retorno de chamada deve retornar um IUnknown
ponteiro de interface para o objeto base.
Métodos
Equals(Object) |
Determina se o objeto especificado é igual ao objeto atual. (Herdado de Object) |
GetHashCode() |
Serve como a função de hash padrão. (Herdado de Object) |
GetType() |
Obtém o Type da instância atual. (Herdado de Object) |
MemberwiseClone() |
Cria uma cópia superficial do Object atual. (Herdado de Object) |
RegisterObjectCreationCallback(ObjectCreationDelegate) |
Registra um |
ToString() |
Retorna uma cadeia de caracteres que representa o objeto atual. (Herdado de Object) |