針對 Microsoft 介面定義語言3.0 問題進行疑難排解

無論您是剪下新的程式碼或移植現有的應用程式,下面的疑難排解問題和解決方式表格可能對您會很有幫助。

注意

Microsoft 介面定義語言 (MIDL) 3.0 的用途是在介面定義語言 (IDL) .idl 檔案 (檔案) 中定義 Windows 執行階段類型。 MIDL 3.0 是定義 c + +/WinRT 執行時間類別的特別便利方式。 如需詳細資訊和背景資訊,請參閱 Microsoft 介面定義語言3.0 簡介

IDL 檔案通常是用來定義 COM 類型;因此,MIDL 3.0 代表使用 IDL 檔案的全新和不同方式,並有擴充的語法。 如需使用 IDL 檔案來定義 (COM 型別) 之非 Windows 執行階段類型的詳細資訊,請參閱Microsoft 介面定義語言

徵兆和解決方式

徵狀 補救方法
在 Visual Studio 中編譯會產生「錯誤 MIDL2003: [msg] 重新定義 [coNtext]: IUnknown",以及許多其他類似的錯誤。 您的工具鏈會設定為自動參考系統命名空間中的任何類型。 在 IDL 檔案中,移除 Windows 命名空間的任何 import 指示詞; 您只需要 import 在專案中定義的任何類型。
錯誤 MIDL2009: [msg] 未定義的符號 [coNtext]: IInspectable 您的工具鏈 設定為自動匯入系統命名空間中的類型。 如果您是從命令列使用 midl.exe ,則請參閱 定義結構,並從命令列呼叫 midl.exe ,以取得正確的命令列語法; 尤其是使用 /reference 參數。 或者,您也可使用 Visual Studio 搭配 c + +/WinRT Visual Studio 擴充功能 (VSIX) (查看c + +/WinRT 的 Visual Studio 支援和 VSIX) 。 如果您執行上述任何專案,則不需要在 IDL 檔案中加入 importWindows.Foundation.idl 指示詞。 但是,如果您參考的是您在專案中定義的型別, 就需要import 指示詞彙入其他 IDL。
錯誤 MIDL2011: [msg] 無法解析的類型宣告 [coNtext]:,後面接著型別名稱。 在 IDL 檔案中,將 IDL 檔案的指示詞加入 import (s) ,其中包含您在專案中定義的任何類型) (s 的定義。
錯誤 MIDL2025: [msg] 語法錯誤 [coNtext]: > 必須是或,near " >> " 在兩 > 個字元之間插入一個空格,因此不會將範本結尾字元組誤解為右移運算子。
錯誤 MIDL2025: [msg] 語法錯誤 [coNtext]: > 必須是或,near "[" 如果您使用陣列做為參數型介面的參數型別引數,就會發生這個錯誤。 這麼做是不正確。 但如需詳細資訊和可能的解決方案,請參閱 參數化型別
Windows 應用程式認證套件測試產生執行階段類別的錯誤之一「不是從 Windows 的基底類別衍生。所有可組合類別必須最終從 Windows 命名空間中的類別衍生」。 您在應用程式中定義的任何執行時間類別 (,) 衍生自基類,稱為可 組合 的類別。 可組合類別的最終基底類別都必須是源自 Windows.* 命名空間的類別;例如,Windows.UI.Xaml.DependencyObject。 如需詳細資訊,請參閱 XAML 控制項;繫結至 C++/WinRT 屬性
在 Visual Studio 中編譯會產生「錯誤 MIDL5148: [msg] 傳統 winrt idl 結構不能用在新式 winrt idl 類型中」 您正在 MIDL 3.0 檔中使用 MIDL 1.0 或2.0 語法。 如需背景資訊,請參閱 MIDL 1.0、2.0 和 3.0
MIDL4035 [msg] 參數的指標類型無效。 某些輸入參數是由指標傳遞,但指標的類型無效。 這通常是與非結構型別搭配使用,或 ref 與實值型別搭配使用的正負號 ref const 。 請注意,錯誤訊息中所述的 [in] 屬性實際上是指錯誤與輸入參數有關,也就是沒有 out 關鍵字的任何參數。 [in]屬性本身不是 MIDL 3.0 中的有效屬性,因此不會出現在程式碼中。