Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Yönetilen kaynak kodunda COM türlerini el ile bildirmeye karar verirseniz, başlamak için en iyi yer mevcut bir Arabirim Tanım Dili (IDL) dosyası veya tür kitaplığıdır. IDL dosyanız yoksa veya tür kitaplığı dosyası oluşturamıyorsanız, yönetilen bildirimler oluşturup sonuçta elde edilen derlemeyi tür kitaplığına aktararak COM türlerinin benzetimini yapabilirsiniz.
Yönetilen kaynaktan COM türlerinin benzetimini yapmak için
Türleri Ortak Dil Belirtimi (CLS) ile uyumlu bir dilde bildirin ve dosyayı derleyin.
Tür Kitaplığı Verme (Tlbexp.exe) ile türleri içeren derlemeyi dışarı aktarın.
DıŞARı aktarılan COM türü kitaplığını, COM odaklı yönetilen türleri bildirmek için temel olarak kullanın.
Çalışma zamanı çağrılabilen sarmalayıcı (RCW) oluşturmak için
IDL dosyanız veya tür kitaplığı dosyanız olduğunu varsayarsak, özel RCW'ye hangi sınıfları ve arabirimleri eklemek istediğinize karar verin. Uygulamanızda doğrudan veya dolaylı olarak kullanmayı amaçlamadığınız türleri dışlayabilirsiniz.
CLS uyumlu bir dilde kaynak dosya oluşturun ve türleri bildirin. İçeri aktarma dönüştürme işleminin tam açıklaması için bkz . Tür Kitaplığından Derlemeye Dönüştürme Özeti . Etkili bir şekilde, özel bir RCW oluşturduğunuzda, Tür Kitaplığı İçeri Aktarıcısı (Tlbimp.exe) tarafından sağlanan tür dönüştürme etkinliğini el ile gerçekleştirirsiniz. Sonraki bölümdeki örnekte, IDL veya tür kitaplığı dosyasındaki türler ve C# kodundaki karşılık gelen türler gösterilir.
Bildirimler tamamlandığında, diğer yönetilen kaynak kodlarını derlerken dosyayı derleyin.
Tlbimp.exe ile içeri aktarılan türlerde olduğu gibi, bazıları doğrudan kodunuza ekleyebileceğiniz ek bilgiler gerektirir. Ayrıntılar için bkz . Nasıl yapılır: Birlikte Çalışma Derlemelerini Düzenleme.
Örnek
Aşağıdaki kod, IDL'deki arabirim ve SATest
sınıfın ISATest
bir örneğini ve C# kaynak kodundaki ilgili türleri gösterir.
IDL veya tür kitaplığı dosyası
[
object,
uuid(40A8C65D-2448-447A-B786-64682CBEF133),
dual,
helpstring("ISATest Interface"),
pointer_default(unique)
]
interface ISATest : IDispatch
{
[id(1), helpstring("method InSArray")]
HRESULT InSArray([in] SAFEARRAY(int) *ppsa, [out,retval] int *pSum);
};
[
uuid(116CCA1E-7E39-4515-9849-90790DA6431E),
helpstring("SATest Class")
]
coclass SATest
{
[default] interface ISATest;
};
Yönetilen kaynak kodunda sarmalayıcı
using System;
using System.Runtime.InteropServices;
using System.Runtime.CompilerServices;
[assembly:Guid("E4A992B8-6F5C-442C-96E7-C4778924C753")]
[assembly:ImportedFromTypeLib("SAServerLib")]
namespace SAServer
{
[ComImport]
[Guid("40A8C65D-2448-447A-B786-64682CBEF133")]
[TypeLibType(TypeLibTypeFlags.FLicensed)]
public interface ISATest
{
[DispId(1)]
//[MethodImpl(MethodImplOptions.InternalCall,
// MethodCodeType=MethodCodeType.Runtime)]
int InSArray( [MarshalAs(UnmanagedType.SafeArray,
SafeArraySubType=VarEnum.VT_I4)] ref int[] param );
}
[ComImport]
[Guid("116CCA1E-7E39-4515-9849-90790DA6431E")]
[ClassInterface(ClassInterfaceType.None)]
[TypeLibType(TypeLibTypeFlags.FCanCreate)]
public class SATest : ISATest
{
[DispId(1)]
[MethodImpl(MethodImplOptions.InternalCall,
MethodCodeType=MethodCodeType.Runtime)]
extern int ISATest.InSArray( [MarshalAs(UnmanagedType.SafeArray,
SafeArraySubType=VarEnum.VT_I4)] ref int[] param );
}
}