我想澄清一下我已经困惑了一段时间的事情。
我已经尝试尽可能多地阅读有关为运行时组件生成 IDL 和 MetaData 文件的文档(第一方和第三方),也许这在于我理解材料的能力,但我仍然有点(非常)迷失。
如果我理解正确,一旦将运行时组件编译成 DLL,它就会用于生成 IDL 文件,然后用于创建 Windows 元数据文件。在 MS 示例应用 Chatterbox VoIP 中,运行时组件项目有一个自定义构建步骤 (PostBuildEvent),它执行以下操作:
pushd "$(OutDir)"
WinMdIdl.exe "$(OutDir)$(RootNamespace).winmd"
MIdl.exe /env $(MidlEnv) /winrt /ns_prefix /metadata_dir "$(FrameworkSdkDir)Windows Metadata" /out "$(SolutionDir)$(ProjectName)ProxyStub" "$(OutDir)$(RootNamespace).idl"
MIdl.exe /env $(MidlEnv) /winrt /ns_prefix /metadata_dir "$(FrameworkSdkDir)Windows Metadata" /out "$(SolutionDir)$(ProjectName)ProxyStub" "$(OutDir)$(RootNamespace).OutOfProcess.idl"
"$(ProjectDir)OopServerRegistrationHelper.exe" /winmd:"$(OutDir)$(RootNamespace).winmd" /dll_name:$(TargetName) /namespace:$(RootNamespace).OutOfProcess /app_manifest:"$(SolutionDir)UI\Properties\WMAppManifest.xml" /helper_dir:"$(SolutionDir)Agents"
popd
但是,在我自己的项目中,在 C# 应用程序中引用的运行时组件中使用简单的 c++ 类,我从未对 IDL 文件的创建/处理进行任何手动配置。我只是在 C# 项目中添加了一个对我的 C++/CX 运行时项目的引用,编译后它就可以工作了。
那么,这里的交易是什么?是否为每个运行时组件项目自动生成 IDL 和 WinMD 文件?还是我不使用这些 IDL 处理工具而做的事情不正确/效率低下?
让我知道是否需要包含更多信息。