Leggere in inglese

Condividi tramite


Risoluzione dei Microsoft Interface Definition Language 3.0

La seguente tabella di sintomi e rimedi per la risoluzione dei problemi può essere utile se devi creare nuovo codice o convertire un'app esistente.

Nota

Lo scopo di Microsoft Interface Definition Language (MIDL) 3.0 è definire tipi Windows Runtime all'interno di file IDL (Interface Definition Language) (.idlfile ). MIDL 3.0 è un modo particolarmente pratico per definire le classi di runtime C++/WinRT . Per altre informazioni e informazioni di base, vedere Introduction to Microsoft Interface Definition Language 3.0 (Introduzione Microsoft Interface Definition Language 3.0).

I file IDL sono stati tradizionalmente usati per definire i tipi COM. MIDL 3.0 rappresenta quindi un modo nuovo e diverso di usare i file IDL, con una sintassi espansa per questi file. Per altre informazioni sull'uso di file IDL per definire tipi non Windows Runtime (tipi COM), vedere Microsoft Interface Definition Language.

Sintomi e rimedi

Sintomo Rimedio
La compilazione in Visual Studio causa l'errore "MIDL2003: [msg]redefinition [context]: IUnknown" e molti altri errori simili. La toolchain è impostata per fare riferimento automaticamente a tutti i tipi presenti negli spazi dei nomi di sistema. Nei file IDL rimuovere import tutte le direttive per gli spazi dei nomi Windows; import è necessario solo per tutti i tipi definiti nel progetto.
errore MIDL2009: [msg]simbolo non definito [contesto]: IInspectable. La toolchain non è impostata per importare automaticamente i tipi negli spazi dei nomi di sistema. Se si usa dalla riga di comando, vedere Struttura delle definizioni e chiamare midl.exe dalla riga di comando per la sintassi corretta della riga di comando, /reference in particolare l'uso dell'opzione midl.exe . In alternativa, compilare i file IDL usando Visual Studio con l'estensione Visual Studio C++/WinRT (VSIX). Vedere Visual Studio support for C++/WinRT (Supporto di Visual Studio per C++/WinRT e VSIX). Se si esempe una di queste operazioni, importWindows.Foundation.idl non sarà necessario aggiungere una direttiva per al file IDL. Tuttavia , sarà necessaria la import direttiva per importare il file IDL aggiuntivo se si fa riferimento ai tipi definiti nel progetto.
errore MIDL2011: [msg]dichiarazione di tipo non risolta [context]:, seguita da un nome di tipo. Nel file IDL aggiungere import una direttiva per i file IDL che contengono le definizioni di uno o più tipi a cui si fa riferimento definito nel progetto.
errore MIDL2025: [msg]errore di sintassi [contesto]: previsto > o, vicino a ">>" Inserire uno spazio tra i due caratteri > in modo che la coppia di caratteri di chiusura del modello non sia interpretata erroneamente come operatore di spostamento a destra.
errore MIDL2025: [msg]errore di sintassi [contesto]: previsto > o, vicino a "[" Questo errore può verificarsi se si usa una matrice come argomento di tipo parametro per un'interfaccia con parametri. Questa operazione non è valida. Per altri dettagli e una potenziale soluzione, vedere Tipi con parametri.
I test del Kit di certificazione app Windows generano un errore che indica che una delle classi di runtime "non deriva da una classe di base di Windows. Tutte le classi componibili devono derivare da un tipo nello spazio dei nomi Windows". Qualsiasi classe di runtime definita nell'applicazione che deriva da una classe di base è nota come classe componibile . La classe di base finale di una classe componibile deve essere un tipo proveniente da uno spazio dei nomi Windows.*, ad esempio Windows.UI.Xaml.DependencyObject. Per altri dettagli, vedi Controlli XAML, binding a una proprietà C++/WinRT.
La compilazione in Visual Studio comporta l'errore "errore MIDL5148: [msg]I costrutti IDL WinRT classici non possono essere usati nei tipi IDL WinRT moderni". Si usa la sintassi MIDL 1.0 o 2.0 nel file MIDL 3.0. Per informazioni di base, vedere MIDL 1.0, 2.0 e 3.0.
MIDL4035 [msg]Il parametro [in] ha un tipo di puntatore non valido. Alcuni parametri di input vengono passati dal puntatore, ma il tipo del puntatore non è valido. Si tratta in genere di un segno ref const usato con un tipo non struct ref o con un tipo valore. Si noti che l'attributo [in] indicato nel messaggio di errore indica effettivamente che l'errore riguarda un parametro di input, ovvero qualsiasi parametro senza la parola out chiave . L'attributo [in] stesso non è un attributo valido in MIDL 3.0 e pertanto non verrà visualizzato nel codice.