Classe ExtensibleClassFactory
Dica
The .NET API Reference documentation has a new home. Visit the .NET API Browser on docs.microsoft.com to see the new experience.
Permite a personalização de objetos gerenciados que se estendem de objetos não gerenciados durante a criação.
Namespace: System.Runtime.InteropServices
Assembly: mscorlib (em mscorlib.dll)
Hierarquia de Herança
System.Object
System.Runtime.InteropServices.ExtensibleClassFactory
Sintaxe
[ComVisibleAttribute(true)]
public sealed class ExtensibleClassFactory
[ComVisibleAttribute(true)]
public ref class ExtensibleClassFactory sealed
[<Sealed>]
[<ComVisibleAttribute(true)>]
type ExtensibleClassFactory = class end
<ComVisibleAttribute(True)>
Public NotInheritable Class ExtensibleClassFactory
Métodos
Nome | Descrição | |
---|---|---|
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() | ||
RegisterObjectCreationCallback(ObjectCreationDelegate) | Registra um delegate que é chamado quando uma instância de um tipo gerenciado, que se estende de um tipo não gerenciado, precisa alocar o objeto não gerenciado agregado. |
|
ToString() | Retorna uma cadeia de caracteres que representa o objeto atual.(Herdado de Object.) |
Comentários
O ExtensibleClassFactory permite que os usuários especifiquem um delegate que é 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 encapsulados pelo RCW. Sem retorno de chamada, o common language runtime cria o objeto de COM subjacentes chamando CoCreateInstance. Esse retorno de chamada fornece uma maneira alternativa de ativação de objeto subjacente, como com um moniker COM ou fornecendo um objeto de singleton. O RegisterObjectCreationCallback método deve ser chamado de static inicializador da classe que está estendendo o RCW. Retorno de chamada de criação de apenas um objeto é permitido por tipo de objeto. Quando o RCW extensível é ativado, o retorno de chamada está registrado. Quando o objeto COM base 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.
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 precisa alocar o objeto não gerenciado agregado. Isso delegate deve alocar e agregar o objeto não gerenciado e é chamado no lugar de um CoCreateInstance. Esta rotina deve ser chamada no contexto da static inicializador para a classe para a qual os retornos de chamada serão feitos.
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
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
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();
}
};
Informações de Versão
.NET Framework
Disponível desde 1.1
Acesso thread-safe
Quaisquer membros estáticos públicos ( Compartilhado no Visual Basic) desse tipo são thread-safe. Não há garantia de que qualquer membro de instância seja thread-safe.
Confira Também
Namespace System.Runtime.InteropServices
Retornar ao início