Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In .NET Framework müssen Schnittstellen, die Objekte auflisten, die IEnumerable-Schnittstelle erben. IEnumerable stellt eine Methode zur Verfügung, nämlich GetEnumerator. Nicht verwaltete COM-Dispatchschnittstellen enthalten einen Member (DISPID_NEWENUM) mit einer speziellen DISPID (-4), wodurch angegeben wird, dass es sich um eine Schnittstelle handelt, die das Auflisten unterstützt. Nach dem Importieren erzwingt das custom-Attribut von einer nicht verwalteten COM-Schnittstelle die Implementierung von IEnumerable. Die Syntax dieses custom-Attributs sieht folgendermaßen aus:
GUID = B64784EB-D8D4-4d9b-9ACD-0E30806426F7
Value = anything
Hinweis |
|---|
Sie können das benutzerdefinierte IEnumerable-Typbibliotheksattribut nur auf eine Schnittstelle, die auf Dispatch beschränkt ist (Disp-Schnittstelle), oder auf eine duale Schnittstelle anwenden.Von IUnknown abgeleitete Schnittstellen können IEnumerable nicht erben. Wenn Sie das custom-Attribut auf eine von IUnknown abgeleitete Schnittstelle anwenden, wird dieses daher vom Typbibliothekimporter ignoriert. |
Beispiel
Das folgende, in IDL (Interface Definition Language) geschriebene Beispiel veranschaulicht die Verwendung des benutzerdefinierten IEnumerable-Typbibliotheksattributs, um die Vererbung von IEnumerable an IMyClass zu erzwingen:
[
object,
uuid(40E86021-CAD7-493B-BF09-43811D821BA7),
dual,
helpstring("IMyClass Interface"),
pointer_default(unique),
// Use the IEnumerable custom attribute.
custom(B64784EB-D8D4-4d9b-9ACD-0E30806426F7,"")
]
interface IMyClass : IDispatch
{
};
[
uuid(3ACBCEB2-9D52-46FA-97E0-063310CFD776),
helpstring("MyClass Class")
]
coclass MyClass
{
[default] interface IMyClass;
};
Die sich nach dem Importieren der Typbibliothek ergebende MSIL (Microsoft Intermediate Language) würde ungefähr wie folgt aussehen:
.class interface public abstract auto ansi import IMyClass
implements [mscorlib]System.Collections.IEnumerable
{
...
} // This is the end of class MyClass.
Wenn Sie beim Überprüfen der MSIL festgestellt haben, dass IEnumerable im Code nicht implementiert wird, können Sie grundsätzlich das custom-Attribut verwenden, um die Implementierung zu erzwingen.
Siehe auch
Referenz
Tlbimp.exe (Type Library Importer-Tool)
Konzepte
Anwenden des custom-Attributs zum Überschreiben des standardmäßigen COM-Dispatchbezeichners (DISPID)
Anwenden des custom-Attributs zum Markieren von Get-/Set-Eigenschaften für nicht verwaltetes COM
Hinweis