ExtensibleClassFactory ExtensibleClassFactory ExtensibleClassFactory ExtensibleClassFactory Class

定義

アンマネージド オブジェクトから拡張したマネージド オブジェクトの作成時に、そのオブジェクトをカスタマイズできるようにします。Enables customization of managed objects that extend from unmanaged objects during creation.

public ref class ExtensibleClassFactory sealed
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class ExtensibleClassFactory
type ExtensibleClassFactory = class
Public NotInheritable Class ExtensibleClassFactory
継承
ExtensibleClassFactoryExtensibleClassFactoryExtensibleClassFactoryExtensibleClassFactory
属性

登録、delegateを非管理対象の型から拡張したマネージ型のインスタンスが集計されたアンマネージ オブジェクトを割り当てる必要があるとき呼び出されます。Registers a delegate that will be called whenever an instance of a managed type that extends from an unmanaged type needs to allocate the aggregated unmanaged object. これは、delegateを割り当てたり、アンマネージ オブジェクトの集計が必要ですの代わりと呼ばれますが、CoCreateInstanceします。This delegate is expected to allocate and aggregate the unmanaged object and is called in place of a CoCreateInstance. このルーチンは、のコンテキストで呼び出される必要があります、staticコールバックが行われる対象のクラスの初期化子。This routine must be called in the context of the static initializer for the class for which the callbacks will be made.

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
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を指定することができます、delegate基になる COM オブジェクトのインスタンスを提供するランタイム呼び出し可能ラッパー (RCW) の構築時に呼び出されます。The ExtensibleClassFactory allows users to specify a delegate that is called during construction of a runtime callable wrapper (RCW) that provides an instance of the underlying COM object. 実際には、コールバックは、RCW によってラップされた COM オブジェクトのクラス ファクトリとして機能します。In effect, the callback acts as the class factory for the COM object wrapped by the RCW. 共通言語ランタイムが呼び出すことによって、基になる COM オブジェクトを作成、コールバックなしCoCreateInstanceします。Without the callback, the common language runtime creates the underlying COM object by calling CoCreateInstance. このコールバックは、COM モニカーまたはシングルトン オブジェクトを提供することなど、基になるオブジェクトをアクティブ化の手段を提供します。This callback provides an alternative way of activating the underlying object, such as with a COM moniker or by providing a singleton object. RegisterObjectCreationCallbackメソッドを呼び出す必要があります、 static RCW を拡張するクラスの初期化子。The RegisterObjectCreationCallback method must be called in the static initializer of the class that is extending the RCW. オブジェクトの種類ごとに 1 つのオブジェクト作成のコールバックが許可されます。Only one object creation callback is permitted per object type. 拡張可能な RCW をアクティブになるとコールバックを登録します。When the extensible RCW is activated, the callback is registered. 基になる COM オブジェクトを作成する必要がある、オブジェクトへの参照を提供するコールバックが呼び出されます。When the underlying COM object needs to be created, the callback is called to provide a reference to the object. コールバックが返す必要があります、IUnknownベース オブジェクトのインターフェイス ポインター。The callback must return an IUnknown interface pointer for the base object.

メソッド

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

指定したオブジェクトが、現在のオブジェクトと等しいかどうかを判断します。Determines whether the specified object is equal to the current object.

(Inherited from Object)
GetHashCode() GetHashCode() GetHashCode() GetHashCode()

既定のハッシュ関数として機能します。Serves as the default hash function.

(Inherited from Object)
GetType() GetType() GetType() GetType()

現在のインスタンスの Type を取得します。Gets the Type of the current instance.

(Inherited from Object)
MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

現在の Object の簡易コピーを作成します。Creates a shallow copy of the current Object.

(Inherited from Object)
RegisterObjectCreationCallback(ObjectCreationDelegate) RegisterObjectCreationCallback(ObjectCreationDelegate) RegisterObjectCreationCallback(ObjectCreationDelegate) RegisterObjectCreationCallback(ObjectCreationDelegate)

アンマネージド型から拡張したマネージド型のインスタンスが、アグリゲートされたアンマネージド オブジェクトを割り当てる必要がある場合に呼び出される delegate を登録します。Registers a delegate that is called when an instance of a managed type, that extends from an unmanaged type, needs to allocate the aggregated unmanaged object.

ToString() ToString() ToString() ToString()

現在のオブジェクトを表す文字列を返します。Returns a string that represents the current object.

(Inherited from Object)

適用対象