【发布时间】:2019-06-30 09:31:18
【问题描述】:
背景:我需要构建一个 Windows 运行时组件作为系统的一部分,该系统设置为使用 CMake 生成其构建系统。作为准备步骤,我正在尝试在命令行上构建它。
从一个简单的 .idl 文件 (MyType.idl) 开始
namespace NS
{
[default_interface]
runtimeclass MyType
{
}
}
我正在尝试使用midlrt.exe 工具生成匹配的 .winmd 文件。以下命令行(为了便于阅读,分成几行)
midlrt
/metadata_dir "%WindowsSdkDir%References\%WindowsSDKVersion%Windows.Foundation.FoundationContract\3.0.0.0"
/reference "%WindowsSdkDir%References\%WindowsSDKVersion%Windows.Foundation.FoundationContract\3.0.0.0\Windows.Foundation.FoundationContract.winmd"
/winmd MyType.winmd
/notlb
/winrt
/nomidl
/nologo
/enum_class
/ns_prefix
/client none
/server none
MyType.idl
生成 MyType.winmd 文件就好了,但我不知道为什么。我对/metadata_dir 和/reference 选项感到特别困惑。运行 midlrt /help 提供以下内容:
/metadata_dir Specify one or more directories containing platform metadata files
/reference Specify one or more WinMD files to import
/metadata_dir 上的官方文档并没有增加太多内容(除了一个令人困惑的评论:“使用此开关指定 Windows 的主要元数据文件的位置,该文件名为 windows.winmd。 ")。 /reference 没有文档。
以下是我需要帮助的地方:
- 对于
/metadata_dir选项,我真正需要传递什么?正如上面命令行中使用的那样,它看起来像是/reference选项的一部分的冗余复制。但是,将其排除在外会产生编译器错误。 - 如何确定所需的
/references 列表,包括其特定版本?
【问题讨论】:
标签: windows-runtime c++-winrt midl winrt-component