簡體   English   中英

為什么 C++/WinRT 需要 XAML 的 IDL 文件?

[英]Why C++/WinRT requires IDL files for XAML?

對於 C#,XAML 轉譯為.cs (*.g.cs) 文件,不需要 IDL 文件。

同樣在 C++ 中,為什么 XAML 不能轉譯為.cpp (*.g.cpp) 文件並且根本不需要任何 IDL 文件?

我不明白。

關於各個部分如何組合在一起的問題有些混亂。 翻譯的主要驅動程序是 IDL 文件。 無論它是由開發人員編寫的還是由 IDE 合成的,都是 IDL 生成以 language-agnostic 方式描述接口和運行時類的 WINMD(Windows 元數據)文件。

所有需要查找類型、查詢成員(如屬性、事件、委托)和生成應用程序包的工具都使用 WINMD。

另一方面,XAML 根本不是編譯過程的一部分。 雖然它的一些內容在編譯時得到驗證,但它通常會被翻譯成緊湊的二進制表示 (XBF),在運行時加載和解析以實例化類型。

關於為什么 C++/WinRT(而不是 C# 或 C++/CX)需要 IDL 的問題很容易回答:根本不可能從 C++ class 定義中獲取足夠的信息來明確地推斷出所需的元數據。

作為一個簡單的例子,考慮屬性。 雖然C#C++/CX都有專門的語言結構來描述屬性,但在 C++ 中並非如此。C++/WinRT 將屬性投影到采用零個或一個參數(分別用於 getter 和 setter)的成員函數。 如果您要從 C++ class 定義中自動推斷出元數據,則工具必須消除屬性和方法之間的歧義。 還有其他挑戰,雖然 Kenny Kerr 一再表示希望獲得更好的 IDE 對 C++/WinRT 的支持,但 Visual Studio 團隊似乎並不關心(例如,請參閱此評論)。

在可預見的未來,如果您選擇使用 C++/WinRT,您應該准備好編寫 IDL 文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM