Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of mappen te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen om mappen te wijzigen.
Opmerking
Deze richtlijnen zijn specifiek voor .NET Framework. Voor moderne .NET COM-interoperabiliteit gebruikt u door de bron gegenereerde COM-interoperabiliteit of de System.Runtime.InteropServices.ComWrappers API. Zie com-interoperabiliteitsoverzicht en COM-brongeneratie voor meer informatie.
Als u besluit com-typen handmatig in beheerde broncode te declareren, kunt u het beste beginnen met een bestaand IDL-bestand (Interface Definition Language) of typebibliotheek. Wanneer u het IDL-bestand niet hebt of geen typebibliotheekbestand kunt genereren, kunt u de COM-typen simuleren door beheerde declaraties te maken en de resulterende assembly te exporteren naar een typebibliotheek.
COM-typen van beheerde bron simuleren
Declareer de typen in een taal die voldoet aan de Common Language Specification (CLS) en compileer het bestand.
Exporteer de assembly die de typen bevat met Type Library Exporter (Tlbexp.exe).
Gebruik de geëxporteerde COM-typebibliotheek als basis voor het declareren van COM-georiënteerde beheerde typen.
Een runtime-aanroepbare wrapper (RCW) maken
Ervan uitgaande dat u een IDL-bestand of typebibliotheekbestand hebt, bepaalt u welke klassen en interfaces u wilt opnemen in de aangepaste RCW. U kunt alle typen uitsluiten die u niet direct of indirect in uw toepassing wilt gebruiken.
Maak een bronbestand in een cls-compatibele taal en declareer de typen. Zie Overzicht van de conversie van typebibliotheek naar assembly voor een volledige beschrijving van het importconversieproces. Wanneer u in feite een aangepaste RCW maakt, voert u handmatig de typeconversieactiviteit uit die wordt geleverd door typebibliotheekimporteur (Tlbimp.exe). In het voorbeeld in de volgende sectie ziet u typen in een IDL- of typebibliotheekbestand en de bijbehorende typen in C#-code.
Wanneer de declaraties zijn voltooid, compileert u het bestand terwijl u andere beheerde broncode compileert.
Net als bij de typen die met Tlbimp.exezijn geïmporteerd, is voor sommige typen aanvullende informatie vereist, die u rechtstreeks aan uw code kunt toevoegen. Zie Procedure voor meer informatie: Interop-assembly's bewerken.
Example
De volgende code toont een voorbeeld van de ISATest interface en SATest klasse in IDL en de bijbehorende typen in C#-broncode.
IDL- of typebibliotheekbestand
[
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;
};
Wrapper in beheerde broncode
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 );
}
}