Résolution des problèmes de Microsoft Interface Definition Language 3.0

Le tableau des symptômes et solutions de problèmes ci-après peut vous être utile, que vous coupiez un nouveau code ou portiez une application existante.

Notes

l’objectif de Microsoft Interface Definition Language (MIDL) 3,0 est de définir des types de Windows Runtime dans des fichiers IDL (Interface Definition Language) ( .idl fichiers). MIDL 3,0 est un moyen particulièrement pratique de définir des classes Runtime C++/WinRT . Pour plus d’informations et pour obtenir de l’arrière-plan, consultez Introduction à Microsoft Interface Definition Language 3,0.

Les fichiers IDL ont été traditionnellement utilisés pour définir les types COM. par conséquent, MIDL 3,0 représente une nouvelle façon d’utiliser des fichiers IDL, avec une syntaxe développée pour eux. pour plus d’informations sur l’utilisation de fichiers IDL pour définir des types non-Windows Runtime (types COM), consultez Microsoft Interface Definition Language.

Symptômes et solutions

Symptôme Solution
la compilation dans Visual Studio génère l'erreur « erreur MIDL2003 : [msg] redéfinition [context] : IUnknown», ainsi que de nombreuses autres erreurs similaires. Votre chaîne d’outils est configuré de façon à référencer automatiquement tous les types qui se trouvent dans les espaces de noms System. dans vos fichiers IDL, supprimez toutes les import directives pour les espaces de noms Windows ; vous n’avez besoin import que des types que vous avez définis dans votre projet.
erreur MIDL2009 : [msg] symbole non défini [context] : IInspectable. Votre chaîne d’outils n’est pas configuré pour importer automatiquement des types dans les espaces de noms System. Si vous midl.exe Utilisez à partir de la ligne de commande, consultez structure de définition et appel de midl.exe à partir de la ligne de commande pour obtenir la syntaxe de ligne de commande correcte ; plus précisément l’utilisation du /reference commutateur. vous pouvez également compiler vos fichiers IDL à l’aide de Visual Studio avec l’Extension/WinRT Visual Studio c++ (vsix) (consultez Visual Studio prise en charge de c++/WinRT et vsix). Si vous effectuez l’une de ces opérations, il n’est pas nécessaire d’ajouter une import directive pour Windows.Foundation.idl à votre fichier IDL. Toutefois , vous aurez besoin de la import directive pour importer un IDL supplémentaire si vous référencez des types que vous avez définis dans votre projet.
erreur MIDL2011 : [msg] Déclaration de type non résolue [context] :, suivi d’un nom de type. Dans votre fichier IDL, ajoutez une import directive pour le ou les fichiers IDL qui contiennent les définitions de tout type que vous référencez et que vous avez définis dans votre projet.
erreur MIDL2025 : [msg] erreur de syntaxe [context] : attendu > ou, près de « >> » Insérez un espace entre les deux > caractères pour que la paire de caractères de fermeture de modèle ne soit pas interprétée à tort comme un opérateur de décalage vers la droite.
erreur MIDL2025 : [msg] erreur de syntaxe [context] : attendu > ou, près de « [ » Cette erreur peut se produire si vous utilisez un tableau en tant qu’argument de type de paramètre pour une interface paramétrable. Cette action n’est pas valide. Toutefois, pour obtenir plus de détails et une solution potentielle, consultez types paramétrables.
Les tests du Kit de certification des applications Windows génèrent une erreur indiquant que l’une de vos classes runtime « ne dérive pas d’une classe de base Windows. Toutes les classes composables doivent en définitive dériver d’un type de l’espace de noms Windows ». Toute classe Runtime (que vous définissez dans votre application) qui dérive d’une classe de base est connue sous le nom de classe composable . La classe de base ultime d’une classe composable doit être un type provenant d’un espace de noms Windows.*, par exemple Windows.UI.Xaml.DependencyObject. Pour plus d’informations, consultez Contrôles XAML ; liaison à une propriété C++/WinRT.
la compilation dans Visual Studio produit «error MIDL5148 : [msg] les constructions idl winrt classiques ne peuvent pas être utilisées dans les types idl winrt modernes». Vous utilisez la syntaxe MIDL 1,0 ou 2,0 dans votre fichier MIDL 3,0. Pour obtenir des informations générales, consultez MIDL 1,0, 2,0 et 3,0.
MIDL4035 [msg] le paramètre [in] a un type pointeur qui n’est pas valide. Un paramètre d’entrée est passé par un pointeur, mais le type du pointeur n’est pas valide. Il s’agit généralement d’un signe qui a été utilisé avec un type non struct ou ref qui ref const a été utilisé avec un type valeur. Notez que l' [in] attribut mentionné dans le message d’erreur signifie en fait que l’erreur concerne un paramètre d’entrée, qui est tout paramètre sans le out mot clé. L’attribut lui-même n’est pas un attribut valide dans MIDL 3,0 et n’apparaît donc pas dans le [in] code.