Pemecahan masalah Microsoft Interface Definition Language 3.0

Tabel gejala dan solusi pemecahan masalah di bawah ini mungkin berguna bagi Anda apakah Anda memotong kode baru atau memindahkan aplikasi yang ada.

Catatan

Tujuan dari Microsoft Interface Definition Language (MIDL) 3.0 adalah untuk menentukan jenis Windows Runtime di dalam file Bahasa Definisi Antarmuka (IDL) (.idl file). MIDL 3.0 adalah cara yang sangat nyaman untuk menentukan kelas runtime C++/WinRT . Untuk informasi dan latar belakang selengkapnya, lihat Pengenalan Microsoft Interface Definition Language 3.0.

File IDL secara tradisional telah digunakan untuk menentukan jenis COM; jadi, MIDL 3.0 mewakili cara baru dan berbeda untuk menggunakan file IDL, dengan sintaks yang diperluas untuk file TERSEBUT. Untuk informasi selengkapnya tentang menggunakan file IDL untuk menentukan jenis Runtime non-Windows (jenis COM), lihat Bahasa Definisi Antarmuka Microsoft.

Gejala dan obat

Gejala Obat
Mengompilasi di Visual Studio menghasilkan "kesalahan MIDL2003: [msg]redefinition [context]: IUnknown", dan banyak kesalahan serupa lainnya. Toolchain Anda disiapkan untuk secara otomatis mereferensikan jenis apa pun yang ada di namespace layanan sistem. Dalam file IDL Anda, hapus arahan apa pun import untuk namespace layanan Windows; Anda hanya perlu jenis import apa pun yang telah Anda tentukan dalam proyek Anda.
error MIDL2009 : [msg]undefined symbol [context]: IInspectable. Toolchain Anda tidak disiapkan untuk mengimpor jenis secara otomatis di namespace layanan sistem. Jika Anda menggunakan midl.exe dari baris perintah, lihat Struktur definisi, dan memanggil midl.exe dari baris perintah untuk sintaks baris perintah yang benar; khususnya penggunaan /reference sakelar. Atau, kompilasi file IDL Anda menggunakan Visual Studio dengan C++/WinRT Visual Studio Extension (VSIX) (lihat dukungan Visual Studio untuk C++/WinRT, dan VSIX). Jika Anda melakukan salah satu hal ini, maka tidak perlu menambahkan import direktif ke Windows.Foundation.idl file IDL Anda. Tetapi Anda akan memerlukan direktif import untuk mengimpor IDL tambahan jika Anda mereferensikan jenis yang telah Anda tentukan dalam proyek Anda.
error MIDL2011 : [msg]unresolved type declaration [context]:, diikuti dengan nama tipe. Dalam file IDL Anda, tambahkan import direktif untuk file IDL yang berisi definisi jenis apa pun yang Anda referensikan yang telah Anda tentukan dalam proyek Anda.
error MIDL2025: [msg]sintaks error [context]: expecting > or, near ">>" Sisipkan spasi di antara dua > karakter sehingga sepasang karakter penutup templat tidak disalahartikan sebagai operator pergeseran kanan.
error MIDL2025: [msg]sintaks error [context]: expecting > or, near "[" Kesalahan ini dapat terjadi jika Anda menggunakan array sebagai argumen jenis parameter ke antarmuka berparameter. Melakukannya tidak valid. Tetapi untuk detail selengkapnya dan solusi potensial lihat Jenis parameter.
Pengujian Windows App Certification Kit menghasilkan kesalahan bahwa salah satu kelas runtime Anda "tidak berasal dari kelas dasar Windows. Semua kelas yang dapat dikomposiskan pada akhirnya harus berasal dari jenis di namespace Layanan Windows". Kelas runtime apa pun (yang Anda tentukan dalam aplikasi Anda) yang berasal dari kelas dasar dikenal sebagai kelas yang dapat dikomposisikan . Kelas dasar utama dari kelas yang dapat disusupi harus merupakan jenis yang berasal dari namespace Layanan Windows.*; misalnya, Windows.UI.Xaml.DependencyObject. Lihat kontrol XAML; ikat ke properti C++/WinRT untuk detail selengkapnya.
Kompilasi di Visual Studio menghasilkan "kesalahan MIDL5148: [msg]Konstruksi WINRT IDL Klasik tidak dapat digunakan dalam jenis IDL WinRT Modern". Anda menggunakan sintaks MIDL 1.0 atau 2.0 di file MIDL 3.0 Anda. Untuk info latar belakang, lihat MIDL 1.0, 2.0, dan 3.0.
MIDL4035 [msg]Parameter [in] memiliki jenis pointer yang tidak valid. Beberapa parameter input diteruskan oleh penunjuk, tetapi jenis penunjuk tidak valid. Ini umumnya adalah tanda yang ref const digunakan dengan jenis non-struct, atau ref digunakan dengan jenis nilai. Perhatikan bahwa atribut yang [in] disebutkan dalam pesan kesalahan sebenarnya berarti bahwa kesalahan menyangkut parameter input, yang merupakan parameter apa pun tanpa out kata kunci . Atribut itu [in] sendiri bukan atribut yang valid di MIDL 3.0 dan oleh karena itu tidak akan muncul dalam kode.