我想澄清一些我曾经困惑过的事情。
我试图尽可能多地阅读关于运行时组件的IDL和MetaData文件生成的文档(第一方和第三方),也许这取决于我理解材料的能力,但我是还是有点(非常)迷失了。
如果我理解正确,一旦将运行时组件编译成DLL,就会生成一个IDL文件,然后用于创建windows元数据文件。在MS示例应用程序Chatterbox VoIP中,Runtime组件项目具有执行以下操作的自定义构建步骤(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#app中引用的Runtime组件中使用简单的c ++类,我从未对IDL文件的创建/处理进行任何手动配置。我只是将C#项目中的一个引用添加到我的C ++ / CX运行时项目中,编译完成后就可以了。
那么,这里的交易是什么?是否为每个运行时组件项目自动生成IDL和WinMD文件?或者我是否通过不使用这些IDL处理工具来做错误/低效的事情?
如果我需要提供更多信息,请与我们联系。