ExtensibleClassFactory クラス
アセンブリ: mscorlib (mscorlib.dll 内)


ExtensibleClassFactory を使用すると、ランタイム呼び出し可能ラッパーの構築時に呼び出され、その中にラップされる COM オブジェクトのインスタンスを提供する delegate を指定できます。実際、このコールバックは、ランタイム呼び出し可能ラッパーによってラップされる COM オブジェクトのクラス ファクトリとして機能します。このコールバックがない場合、共通言語ランタイムは、CoCreateInstance を呼び出して、ラップされる COM オブジェクトを作成します。このコールバックは、COM モニカの使用、シングルトン オブジェクトの提供など、ラップされるオブジェクトをアクティブにするための方法の代わりとなる役割を果たします。RegisterObjectCreationCallback メソッドは、ランタイム呼び出し可能ラッパーを拡張しているクラスの static 初期化子で呼び出す必要があります。1 つのオブジェクト型で使用できるオブジェクト作成コールバックは 1 つだけです。拡張できるランタイム呼び出し可能ラッパーをアクティブにしたときに、そのコールバックが登録されます。ラップされる COM オブジェクトを作成する必要がある場合は、そのオブジェクトへの参照を取得するためにコールバックが呼び出されます。コールバックは、基本オブジェクトの IUnknown インターフェイス ポインタを返す必要があります。

アンマネージ型から拡張したマネージ型のインスタンスが、アグリゲートされたアンマネージ オブジェクトを割り当てる必要がある場合に、必ず呼び出されるデリゲートを登録します。この delegate は、CoCreateInstance の代わりに呼び出され、アンマネージ オブジェクトを割り当ててアグリゲートする必要があります。このルーチンは、コールバックが行われる対象のクラスの static 初期化子のコンテキストで呼び出す必要があります。
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
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(); } }
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(); } };
package ECFSRV32Lib; import System.*; import System.Runtime.InteropServices.*; public class CallBack { public IntPtr Activate(IntPtr Aggregator) { ECFSRV32Lib.ObjectActivator oCOM = new ECFSRV32Lib.ObjectActivator(); ECFSRV32Lib.IObjectActivator iTf= (ECFSRV32Lib.IObjectActivator)(oCOM); return (new IntPtr(iTf.CreateBaseComponent((Aggregator).ToInt32()))); } //Activate } //CallBack // // The EcfInner class. First .NET class derived directly from COM class. // public class EcfInner extends ECFSRV32Lib.BaseComponent { private static CallBack callbackInner; static void RegisterInner() { callbackInner = new CallBack(); System.Runtime.InteropServices.ExtensibleClassFactory. RegisterObjectCreationCallback(new System.Runtime. InteropServices.ObjectCreationDelegate(callbackInner.Activate)); } //RegisterInner //This is the static initializer. static { RegisterInner(); } //EcfInner } //EcfInner

System.Runtime.InteropServices.ExtensibleClassFactory


Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


ExtensibleClassFactory メソッド

名前 | 説明 | |
---|---|---|
![]() | Equals | オーバーロードされます。 2 つの Object インスタンスが等しいかどうかを判断します。 ( Object から継承されます。) |
![]() | GetHashCode | 特定の型のハッシュ関数として機能します。GetHashCode は、ハッシュ アルゴリズムや、ハッシュ テーブルのようなデータ構造での使用に適しています。 ( Object から継承されます。) |
![]() | GetType | 現在のインスタンスの Type を取得します。 ( Object から継承されます。) |
![]() | ReferenceEquals | 指定した複数の Object インスタンスが同一かどうかを判断します。 ( Object から継承されます。) |
![]() | RegisterObjectCreationCallback | アンマネージ型から拡張したマネージ型のインスタンスが、アグリゲートされたアンマネージ オブジェクトを割り当てる必要がある場合に呼び出されるデリゲートを登録します。 |
![]() | ToString | 現在の Object を表す String を返します。 ( Object から継承されます。) |

ExtensibleClassFactory メンバ
アンマネージ オブジェクトから拡張したマネージ オブジェクトの作成時に、そのオブジェクトをカスタマイズできるようにします。
ExtensibleClassFactory データ型で公開されるメンバを以下の表に示します。

名前 | 説明 | |
---|---|---|
![]() | Equals | オーバーロードされます。 2 つの Object インスタンスが等しいかどうかを判断します。 (Object から継承されます。) |
![]() | GetHashCode | 特定の型のハッシュ関数として機能します。GetHashCode は、ハッシュ アルゴリズムや、ハッシュ テーブルのようなデータ構造での使用に適しています。 (Object から継承されます。) |
![]() | GetType | 現在のインスタンスの Type を取得します。 (Object から継承されます。) |
![]() | ReferenceEquals | 指定した複数の Object インスタンスが同一かどうかを判断します。 (Object から継承されます。) |
![]() | RegisterObjectCreationCallback | アンマネージ型から拡張したマネージ型のインスタンスが、アグリゲートされたアンマネージ オブジェクトを割り当てる必要がある場合に呼び出されるデリゲートを登録します。 |
![]() | ToString | 現在の Object を表す String を返します。 (Object から継承されます。) |

Weblioに収録されているすべての辞書からExtensibleClassFactoryを検索する場合は、下記のリンクをクリックしてください。

- ExtensibleClassFactoryのページへのリンク