ExtensibleClassFactory Sınıf
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
Oluşturma sırasında yönetilmeyen nesnelerden genişletilen yönetilen nesnelerin özelleştirilmesini sağlar.
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
- Devralma
-
ExtensibleClassFactory
- Öznitelikler
Örnekler
Yönetilmeyen bir delegate
türden genişletilen yönetilen türün bir örneğinin toplanmış yönetilmeyen nesneyi ayırması gerektiğinde çağrılacak bir kaydeder. Bunun delegate
yönetilmeyen nesneyi ayırması ve toplaması beklenir ve yerine çağrılır CoCreateInstance
. Bu yordam, geri çağırmaların static
yapılacağı sınıf için başlatıcı bağlamında çağrılmalıdır.
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
Açıklamalar
kullanıcıların ExtensibleClassFactory
, temel alınan COM nesnesinin bir örneğini sağlayan bir çalışma zamanı çağrılabilir sarmalayıcı (RCW) oluşturulurken çağrılan bir belirtmesine delegate
olanak tanır. Aslında geri çağırma, RCW tarafından sarmalanan COM nesnesi için sınıf fabrikası işlevi görür. Geri çağırma olmadan ortak dil çalışma zamanı çağrısı CoCreateInstance
yaparak temel alınan COM nesnesini oluşturur. Bu geri çağırma, bir COM bilinen adıyla veya tekil bir nesne sağlayarak temel alınan nesneyi etkinleştirmenin alternatif bir yolunu sağlar. yöntemi RCW'yi RegisterObjectCreationCallbackstatic
genişleten sınıfın başlatıcısında çağrılmalıdır. Nesne türü başına yalnızca bir nesne oluşturma geri çağırmaya izin verilir. Genişletilebilir RCW etkinleştirildiğinde geri arama kaydedilir. Temel alınan COM nesnesinin oluşturulması gerektiğinde, nesneye bir başvuru sağlamak için geri çağırma çağrılır. Geri çağırma, temel nesne için bir IUnknown
arabirim işaretçisi döndürmelidir.
Yöntemler
Equals(Object) |
Belirtilen nesnenin geçerli nesneye eşit olup olmadığını belirler. (Devralındığı yer: Object) |
GetHashCode() |
Varsayılan karma işlevi işlevi görür. (Devralındığı yer: Object) |
GetType() |
Type Geçerli örneğini alır. (Devralındığı yer: Object) |
MemberwiseClone() |
Geçerli Objectöğesinin sığ bir kopyasını oluşturur. (Devralındığı yer: Object) |
RegisterObjectCreationCallback(ObjectCreationDelegate) |
Yönetilmeyen bir |
ToString() |
Geçerli nesneyi temsil eden dizeyi döndürür. (Devralındığı yer: Object) |