ExtensibleClassFactory Sınıf

Tanım

Oluşturma sırasında yönetilmeyen nesnelerden genişletilen yönetilen nesnelerin özelleştirilmesini sağlar.

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
Devralma
ExtensibleClassFactory
Öznitelikler

Örnekler

Yönetilmeyen bir delegate türden genişletilen yönetilen türün bir örneğinin toplanmış yönetilmeyen nesneyi ayırması gerektiğinde çağrılacak bir kaydeder. Bunun delegate yönetilmeyen nesneyi ayırması ve toplaması beklenir ve yerine çağrılır CoCreateInstance. Bu yordam, geri çağırmaların static yapılacağı sınıf için başlatıcı bağlamında çağrılmalıdır.

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

Açıklamalar

kullanıcıların ExtensibleClassFactory , temel alınan COM nesnesinin bir örneğini sağlayan çalışma zamanı çağrılabilir sarmalayıcının (RCW) oluşturulması sırasında çağrılan bir belirtmesine delegate olanak tanır. Aslında geri çağırma, RCW tarafından sarmalanan COM nesnesi için sınıf fabrikası işlevi görür. Geri çağırma olmadan ortak dil çalışma zamanı çağrısı CoCreateInstanceyaparak temel alınan COM nesnesini oluşturur. Bu geri çağırma, bir COM bilinen adıyla veya tekil bir nesne sağlayarak temel alınan nesneyi etkinleştirmenin alternatif bir yolunu sağlar. yöntemi RCW'yi RegisterObjectCreationCallback static genişleten sınıfın başlatıcısında çağrılmalıdır. Nesne türü başına yalnızca bir nesne oluşturma geri çağırmaya izin verilir. Genişletilebilir RCW etkinleştirildiğinde geri arama kaydedilir. Temel alınan COM nesnesinin oluşturulması gerektiğinde, nesneye bir başvuru sağlamak için geri çağırma çağrılır. Geri çağırma, temel nesne için bir IUnknown arabirim işaretçisi döndürmelidir.

Yöntemler

Equals(Object)

Belirtilen nesnenin geçerli nesneye eşit olup olmadığını belirler.

(Devralındığı yer: Object)
GetHashCode()

Varsayılan karma işlevi işlevi görür.

(Devralındığı yer: Object)
GetType()

Type Geçerli örneğini alır.

(Devralındığı yer: Object)
MemberwiseClone()

Geçerli Objectöğesinin sığ bir kopyasını oluşturur.

(Devralındığı yer: Object)
RegisterObjectCreationCallback(ObjectCreationDelegate)

Yönetilmeyen bir delegate türden genişletilen yönetilen türün bir örneğinin toplanmış yönetilmeyen nesneyi ayırması gerektiğinde çağrılan bir kaydeder.

ToString()

Geçerli nesneyi temsil eden dizeyi döndürür.

(Devralındığı yer: Object)

Şunlara uygulanır