次の方法で共有


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 モニカーやシングルトン オブジェクトを提供するなど、基になるオブジェクトをアクティブ化する別の方法を提供します。 RegisterObjectCreationCallback RCW を拡張しているクラスのstatic初期化子で メソッドを呼び出す必要があります。 オブジェクトの種類ごとに許可されるオブジェクト作成コールバックは 1 つだけです。 拡張可能な RCW がアクティブ化されると、コールバックが登録されます。 基になる COM オブジェクトを作成する必要がある場合は、オブジェクトへの参照を提供するためにコールバックが呼び出されます。 コールバックは、基本オブジェクトの IUnknown インターフェイス ポインターを返す必要があります。

メソッド

Equals(Object)

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

(継承元 Object)
GetHashCode()

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

(継承元 Object)
GetType()

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

(継承元 Object)
MemberwiseClone()

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

(継承元 Object)
RegisterObjectCreationCallback(ObjectCreationDelegate)

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

ToString()

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

(継承元 Object)

適用対象