Behandlung von Problemen mit Microsoft Interface Definition Language 3.0
Die Tabelle mit den Symptomen und Lösungen unten kann für Sie hilfreich sein, gleich ob Sie neuen Code schreiben oder eine bestehende Anwendung portieren.
Hinweis
Der Zweck von Microsoft Interface Definition Language (MIDL) 3.0 besteht darin, Windows-Runtime Typen in IDL-Dateien (Interface Definition Language) ( Dateien) zu.idl
definieren. MIDL 3.0 ist eine besonders praktische Möglichkeit zum Definieren von C++/WinRT-Laufzeitklassen . Weitere Informationen und Hintergrundinformationen finden Sie unter Einführung in Microsoft Interface Definition Language 3.0.
IDL-Dateien wurden bisher verwendet, um COM-Typen zu definieren. MIDL 3.0 stellt also eine neue und andere Methode zur Verwendung von IDL-Dateien mit einer erweiterten Syntax für sie dar. Weitere Informationen zur Verwendung von IDL-Dateien zum Definieren nicht Windows-Runtime Typen (COM-Typen) finden Sie unter Microsoft Interface Definition Language.
Symptome und Lösungen
Symptom | Problembehandlung |
---|---|
Die Kompilierung in Visual Studio führt zu dem Fehler MIDL2003: [msg]redefinition [context]: IUnknown" und vielen anderen ähnlichen Fehlern. | Ihre Toolkette ist so eingerichtet, dass sie automatisch auf alle Typen verweist, die sich in Systemnamespaces befinden. Entfernen Sie in Ihren IDL-Dateien alle Anweisungen für Windows Namespacesimport . Sie müssen nur alle Typen verwenden, import die Sie in Ihrem Projekt definiert haben. |
Error MIDL2009 : [msg]undefiniertes Symbol [Context]: IInspectable. | Ihre Toolkette ist nicht für den automatischen Import von Typen in Systemnamespaces eingerichtet. Wenn Sie über midl.exe die Befehlszeile verwenden, finden Sie unter Definitionsstruktur und Aufrufen von midl.exe /reference über die Befehlszeile die richtige Befehlszeilensyntax, insbesondere die Verwendung des Schalters. Alternativ können Sie Ihre IDL-Dateien mithilfe von Visual Studio mit der C++/WinRT-Visual Studio-Erweiterung (VSIX) kompilieren (siehe Visual Studio-Unterstützung für C++/WinRT und VSIX). Wenn Sie eine dieser Schritte unternehmen, import Windows.Foundation.idl ist es nicht erforderlich, ihrer IDL-Datei eine -Direktive für hinzuzufügen. Sie benötigen jedoch die -Direktive import , um zusätzliche IDL zu importieren, wenn Sie auf Typen verweisen, die Sie in Ihrem Projekt definiert haben. |
Fehler MIDL2011: [msg]nicht aufgelöste Typdeklaration [Context]:, gefolgt von einem Typnamen. | Fügen Sie in Ihrer IDL-Datei eine -Direktive für die IDL-Dateien hinzu, import die die Definitionen beliebiger Typen enthalten, auf die Sie in Ihrem Projekt verweisen. |
Error MIDL2025: [msg]syntax error [context]: expecting > or, near ">>" | Fügen Sie ein Leerzeichen zwischen den beiden Zeichen > ein, damit das Zeichenpaar, das die Vorlage schließt, nicht falsch als Rechtsverschiebungsoperator interpretiert wird. |
Error MIDL2025: [msg]syntax error [context]: expecting > or, near "[" | Dieser Fehler kann auftreten, wenn Sie ein Array als Parametertypargument für eine parametrisierte Schnittstelle verwenden. Dies ist ungültig. Weitere Informationen und eine mögliche Lösung finden Sie unter Parametrisierte Typen. |
Die Tests im Zertifizierungskit für Windows-Apps erzeugen einen Fehler, dass eine Ihrer Laufzeitklassen „ist nicht von einer Windows-Basisklasse abgeleitet. Alle zusammensetzbaren Klassen müssen letztlich von einem Typ im Windows-Namespace abgeleitet sein“. | Jede Laufzeitklasse (die Sie in Ihrer Anwendung definieren), die von einer Basisklasse abstammt, wird als composable-Klasse bezeichnet. Die letztliche Basisklasse einer zusammensetzbaren Klasse muss ein Typ sein, der seinen Ursprung in einem Windows.*-Namespace hat; beispielsweise Windows.UI.Xaml.DependencyObject. Weitere Details finden Sie unter XAML-Steuerelemente; Binden an eine C++/WinRT-Eigenschaft. |
Die Kompilierung in Visual Studio führt zu dem Fehler MIDL5148: [msg]Klassische WinRT-IDL-Konstrukte können nicht in modernen WinRT-IDL-Typen verwendet werden". | Sie verwenden die MIDL 1.0- oder 2.0-Syntax in Ihrer MIDL 3.0-Datei. Hintergrundinformationen finden Sie unter MIDL 1.0, 2.0 und 3.0. |
MIDL4035 [msg]Der [in]-Parameter verfügt über einen ungültigen Zeigertyp. | Einige Eingabeparameter werden vom Zeiger übergeben, aber der Typ des Zeigers ist ungültig. Dies ist im Allgemeinen ein Vorzeichen, ref const das mit einem Nichtstrukturtyp oder ref mit einem Werttyp verwendet wurde. Beachten Sie, dass [in] das in der Fehlermeldung erwähnte Attribut tatsächlich bedeutet, dass der Fehler einen Eingabeparameter betrifft, bei dem es sich um einen beliebigen Parameter ohne das Schlüsselwort out handelt. Das [in] Attribut selbst ist kein gültiges Attribut in MIDL 3.0 und wird daher nicht im Code angezeigt. |