ExtensibleClassFactory Kelas

Definisi

Memungkinkan penyesuaian objek terkelola yang diperluas dari objek yang tidak dikelola selama pembuatan.

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
Warisan
ExtensibleClassFactory
Atribut

Contoh

Mendaftarkan yang akan dipanggil setiap kali instans delegate jenis terkelola yang diperluas dari jenis yang tidak dikelola perlu mengalokasikan objek tidak terkelola agregat. Ini delegate diharapkan untuk mengalokasikan dan mengagregasi objek yang tidak dikelola dan dipanggil sebagai pengganti CoCreateInstance. Rutinitas ini harus dipanggil dalam konteks static penginisialisasi untuk kelas tempat panggilan balik akan dilakukan.

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

Keterangan

memungkinkan ExtensibleClassFactory pengguna untuk menentukan delegate yang dipanggil selama konstruksi pembungkus yang dapat dipanggil runtime (RCW) yang menyediakan instans objek COM yang mendasarinya. Akibatnya, panggilan balik bertindak sebagai pabrik kelas untuk objek COM yang dibungkus oleh RCW. Tanpa panggilan balik, runtime bahasa umum membuat objek COM yang mendasarinya dengan memanggil CoCreateInstance. Panggilan balik ini menyediakan cara alternatif untuk mengaktifkan objek yang mendasar, seperti dengan moniker COM atau dengan menyediakan objek singleton. Metode RegisterObjectCreationCallback harus dipanggil di penginisialisasi static kelas yang memperluas RCW. Hanya satu panggilan balik pembuatan objek yang diizinkan per jenis objek. Ketika RCW yang dapat diperluas diaktifkan, panggilan balik terdaftar. Ketika objek COM yang mendasar perlu dibuat, panggilan balik dipanggil untuk memberikan referensi ke objek . Panggilan balik harus mengembalikan penunjuk IUnknown antarmuka untuk objek dasar.

Metode

Equals(Object)

Menentukan apakah objek yang ditentukan sama dengan objek saat ini.

(Diperoleh dari Object)
GetHashCode()

Berfungsi sebagai fungsi hash default.

(Diperoleh dari Object)
GetType()

Mendapatkan instans Type saat ini.

(Diperoleh dari Object)
MemberwiseClone()

Membuat salinan dangkal dari yang saat ini Object.

(Diperoleh dari Object)
RegisterObjectCreationCallback(ObjectCreationDelegate)

Mendaftarkan yang dipanggil ketika instans delegate jenis terkelola, yang meluas dari jenis yang tidak dikelola, perlu mengalokasikan objek tidak terkelola agregat.

ToString()

Mengembalikan string yang mewakili objek saat ini.

(Diperoleh dari Object)

Berlaku untuk