ExtensibleClassFactoryとは? わかりやすく解説

ExtensibleClassFactory クラス

アンマネージ オブジェクトから拡張したマネージ オブジェクトの作成時に、そのオブジェクトカスタマイズできるようにします。

名前空間: System.Runtime.InteropServices
アセンブリ: mscorlib (mscorlib.dll 内)
構文構文

<ComVisibleAttribute(True)> _
Public NotInheritable Class
 ExtensibleClassFactory
Dim instance As ExtensibleClassFactory
[ComVisibleAttribute(true)] 
public sealed class ExtensibleClassFactory
[ComVisibleAttribute(true)] 
public ref class ExtensibleClassFactory sealed
/** @attribute ComVisibleAttribute(true) */ 
public final class ExtensibleClassFactory
ComVisibleAttribute(true) 
public final class ExtensibleClassFactory
解説解説

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.Object
  System.Runtime.InteropServices.ExtensibleClassFactory
スレッド セーフスレッド セーフ
この型の public static (Visual Basic では Shared) メンバはすべて、スレッド セーフです。インスタンス メンバ場合は、スレッド セーフであるとは限りません。
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照
関連項目
ExtensibleClassFactory メンバ
System.Runtime.InteropServices 名前空間

ExtensibleClassFactory メソッド


ExtensibleClassFactory メンバ



このページでは「.NET Framework クラス ライブラリ リファレンス」からExtensibleClassFactoryを検索した結果を表示しています。
Weblioに収録されているすべての辞書からExtensibleClassFactoryを検索する場合は、下記のリンクをクリックしてください。
 全ての辞書からExtensibleClassFactory を検索

英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「ExtensibleClassFactory」の関連用語

ExtensibleClassFactoryのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



ExtensibleClassFactoryのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
日本マイクロソフト株式会社日本マイクロソフト株式会社
© 2025 Microsoft.All rights reserved.

©2025 GRAS Group, Inc.RSS