Windows runtime 如何使用midlrt.exe将.idl编译为.winmd?
背景:我需要构建一个Windows运行时组件,作为系统的一部分,该系统被设置为用于生成其构建系统。作为准备步骤,我正在尝试在命令行上构建它Windows runtime 如何使用midlrt.exe将.idl编译为.winmd?,windows-runtime,c++-winrt,midl,winrt-component,Windows Runtime,C++ Winrt,Midl,Winrt Component,背景:我需要构建一个Windows运行时组件,作为系统的一部分,该系统被设置为用于生成其构建系统。作为准备步骤,我正在尝试在命令行上构建它 从一个裸体的.idl文件(MyType.idl)开始 NS { [默认_接口] 运行时类MyType { } } 我正在尝试使用该工具生成一个匹配的.winmd文件。下面的命令行(为了可读性,分成几行) midlrt /Meta AddiaTadir“%WINDOWSDSKDR%引用”%WINDOWSDKVIEST% Windows .Frase.Fuf
从一个裸体的.idl文件(MyType.idl)开始
NS
{
[默认_接口]
运行时类MyType
{
}
}
我正在尝试使用该工具生成一个匹配的.winmd文件。下面的命令行(为了可读性,分成几行)
midlrt
/Meta AddiaTadir“%WINDOWSDSKDR%引用”%WINDOWSDKVIEST% Windows .Frase.Fuffic Prase\3.0.0.0
引用“%WINDOWSDSKDR%引用”%WINDOWSDSKVIEW%WINDOWS .FAST.Basic契约\3.0.0.0\Windows .Fase.基础合同.WINMD“
/winmd MyType.winmd
/notlb
/温特
/诺米德尔
/诺洛戈
/枚举类
/ns_前缀
/客户无
/服务器无
MyType.idl
生成MyType.winmd文件很好,但我不知道为什么。我对/metadata\u dir
和/reference
选项特别困惑。运行midlrt/help
提供以下功能:
/metadata\u dir指定一个或多个包含平台元数据文件的目录
/引用指定要导入的一个或多个WinMD文件
关于的官方文档对此没有太多补充(除了一句令人困惑的评论:“使用此开关指定Windows主元数据文件的位置,该文件名为Windows.winmd。”)。没有关于/reference
的文档
以下是我需要的帮助:
- 对于
选项,我真正需要传递什么?在上面的命令行中使用时,它看起来像是/metadata\u dir
选项的一部分的冗余复制。但是,忽略它会产生编译器错误/reference
- 如何确定所需的
列表,包括其特定版本/reference
<代码> MIDLRT SAMPL.IDL/Meta Addiadir“C:\程序文件(x86)\ Windows工具包\ 10个引用\\0.0.18362.0 \ Windows .Fase.基础合同\3.0.0.0”
找到这条路很难。首先在注册表中查找SDK安装路径。然后选择您希望针对的SDK版本。然后找到最新版本的基础合同。您可以在这里了解C++/WinRT是如何做到这一点的: /引用是一种较新的功能,您可以使用它从winmd导入定义,而不必使用IDL导入/包含定义。这主要是一种优化,因为这往往比包含相应的IDL定义快得多无论是否使用/reference,您仍然需要使用/metadata\u dir,因为它们用于不同的事情。这与CPPWRR.EXE不同,在这里只有一个协调引用标志。 SO“代码> /参考< /COD>在IDL中与编译器在C++代码中的切换相同,其目的是扩展相应文件,就像它被包含在代码中一样。这就回答了这个问题。我仍然需要帮助确定如何确定
/metadata\u dir
参数。C++/WinRT VSIX似乎做得很好,但我很难弄清楚它是如何将所需位置收集到生成的响应文件中的。有关于这方面的文档吗?我已经扩展了我的答案来描述这一点。