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 개체의 클래스 팩터리 역할을 합니다. 콜백이 없으면 공용 언어 런타임에서 기본 COM 개체를 호출 CoCreateInstance하여 만듭니다. 이 콜백은 COM 모니커를 사용하거나 싱글톤 개체를 제공하는 등 기본 개체를 활성화하는 다른 방법을 제공합니다. RCW를 static 확장하는 클래스의 이 RegisterObjectCreationCallback 니셜라이저에서 메서드를 호출해야 합니다. 개체 형식당 하나의 개체 만들기 콜백만 허용됩니다. 확장 가능한 RCW가 활성화되면 콜백이 등록됩니다. 기본 COM 개체를 만들어야 하는 경우 개체에 대한 참조를 제공하기 위해 콜백이 호출됩니다. 콜백은 기본 개체에 IUnknown 대한 인터페이스 포인터를 반환해야 합니다.
메서드
| Name | Description |
|---|---|
| Equals(Object) |
지정한 개체와 현재 개체가 같은지 여부를 확인합니다. (다음에서 상속됨 Object) |
| GetHashCode() |
기본 해시 함수로 작동합니다. (다음에서 상속됨 Object) |
| GetType() |
현재 인스턴스의 Type 가져옵니다. (다음에서 상속됨 Object) |
| MemberwiseClone() |
현재 Object단순 복사본을 만듭니다. (다음에서 상속됨 Object) |
| RegisterObjectCreationCallback(ObjectCreationDelegate) |
|
| ToString() |
현재 개체를 나타내는 문자열을 반환합니다. (다음에서 상속됨 Object) |