ExtensibleClassFactory 클래스

정의

만드는 동안 관리되지 않는 개체에서 확장되는 관리되는 개체를 사용자 지정할 수 있습니다.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
상속
ExtensibleClassFactory
특성

예제

등록을 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.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 는 런타임 호출 가능 래퍼 (RCW) 기본 COM 개체의 인스턴스를 제공 하는 생성 하는 동안 호출 되는 합니다.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. 개체 유형별 개체를 하나만 생성 콜백에서 허용 됩니다.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)

지정한 개체가 현재 개체와 같은지를 확인합니다.Determines whether the specified object is equal to the current object.

(다음에서 상속됨 Object)
GetHashCode()

기본 해시 함수로 작동합니다.Serves as the default hash function.

(다음에서 상속됨 Object)
GetType()

현재 인스턴스의 Type을 가져옵니다.Gets the Type of the current instance.

(다음에서 상속됨 Object)
MemberwiseClone()

현재 Object의 단순 복사본을 만듭니다.Creates a shallow copy of the current Object.

(다음에서 상속됨 Object)
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()

현재 개체를 나타내는 string을 반환합니다.Returns a string that represents the current object.

(다음에서 상속됨 Object)

적용 대상