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を使用すると、基になる COM オブジェクトのインスタンスを提供するランタイム呼び出し可能ラッパー (RCW) の構築中に呼び出されるdelegateを指定できます。 実際には、コールバックは RCW によってラップされた COM オブジェクトのクラス ファクトリとして機能します。 コールバックがない場合、共通言語ランタイムは、 CoCreateInstanceを呼び出して基になる COM オブジェクトを作成します。 このコールバックは、COM モニカーやシングルトン オブジェクトを提供するなど、基になるオブジェクトをアクティブ化する別の方法を提供します。 メソッドは、RCW を拡張するクラスの初期化子で呼び出す必要があります。 オブジェクトの種類ごとに許可されるオブジェクト作成コールバックは 1 つだけです。 拡張可能な RCW がアクティブ化されると、コールバックが登録されます。 基になる COM オブジェクトを作成する必要がある場合は、オブジェクトへの参照を提供するためにコールバックが呼び出されます。 コールバックは、基本オブジェクトの IUnknown インターフェイス ポインターを返す必要があります。

メソッド

名前 説明
Equals(Object)

指定したオブジェクトが現在のオブジェクトと等しいかどうかを判断します。

(継承元 Object)
GetHashCode()

既定のハッシュ関数として機能します。

(継承元 Object)
GetType()

現在のインスタンスの Type を取得します。

(継承元 Object)
MemberwiseClone()

現在の Objectの簡易コピーを作成します。

(継承元 Object)
RegisterObjectCreationCallback(ObjectCreationDelegate)

アンマネージド型から拡張されるマネージド型のインスタンスが、集計されたアンマネージ オブジェクトを割り当てる必要がある場合に呼び出される delegate を登録します。

ToString()

現在のオブジェクトを表す文字列を返します。

(継承元 Object)

適用対象