ExtensibleClassFactory クラス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
アンマネージド オブジェクトから拡張したマネージド オブジェクトの作成時に、そのオブジェクトをカスタマイズできるようにします。
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 モニカーやシングルトン オブジェクトを提供するなど、基になるオブジェクトをアクティブ化する別の方法を提供します。
RegisterObjectCreationCallback RCW を拡張しているクラスのstatic
初期化子で メソッドを呼び出す必要があります。 オブジェクトの種類ごとに許可されるオブジェクト作成コールバックは 1 つだけです。 拡張可能な RCW がアクティブ化されると、コールバックが登録されます。 基になる COM オブジェクトを作成する必要がある場合は、オブジェクトへの参照を提供するためにコールバックが呼び出されます。 コールバックは、基本オブジェクトの IUnknown
インターフェイス ポインターを返す必要があります。
メソッド
Equals(Object) |
指定されたオブジェクトが現在のオブジェクトと等しいかどうかを判断します。 (継承元 Object) |
GetHashCode() |
既定のハッシュ関数として機能します。 (継承元 Object) |
GetType() |
現在のインスタンスの Type を取得します。 (継承元 Object) |
MemberwiseClone() |
現在の Object の簡易コピーを作成します。 (継承元 Object) |
RegisterObjectCreationCallback(ObjectCreationDelegate) |
アンマネージド型から拡張したマネージド型のインスタンスが、アグリゲートされたアンマネージド オブジェクトを割り当てる必要がある場合に呼び出される |
ToString() |
現在のオブジェクトを表す文字列を返します。 (継承元 Object) |
適用対象
.NET