在单个 "Windows Runtime Component C++/WinRT" 项目中使用多个 .IDL (MIDL) 文件的正确方法
Correct way to use multiple .IDL (MIDL) files within a single "Windows Runtime Component C++/WinRT" project
Visual Studio 2019。Windows 运行时组件 C++/WinRT 项目。
我如何遵循和实施建议:"We recommend that you declare each runtime class in its own Interface Definition Language (IDL) (.idl) file, in order to optimize build performance when you edit an IDL file, and for logical correspondence of an IDL file to its generated source code files. Visual Studio merges all of the resulting .winmd files into a single file with the same name as the root namespace. That final .winmd file will be the one that the consumers of your component will reference."
https://docs.microsoft.com/en-us/windows/uwp/cpp-and-winrt-apis/author-apis
在同一个项目中,我可以使用项目->添加新项->中间文件 (.idl) 添加第二个(第三个等等).IDL 文件。这似乎工作正常?!然后,我为每个 .IDL 文件手动添加关联的 .h 和 .cpp 文件。构建以生成存根文件,然后在成功的最终构建之前手动复制和 "fill in" 这些文件。通过这种方式,每个运行时我都有一个 IDL 文件 class 及其关联的 header 和实现文件,包括实现所需的任何其他文件(c++ .h 和 .cpp 文件)。因为我需要向界面添加功能,所以我只编辑 IDL 文件,重建并向 header 和实现 C++ 文件添加功能。
这是推荐的吗?!?
当我添加 .IDL 文件然后手动添加关联的 .h 和 .cpp 时,它们不会出现 "under" .IDL 文件,就像我创建新项目时原始文件那样。这只是 Solution Explorer 的视觉效果,还是表明我有问题?!?
我计划有多个 "C++/WinRT WRC" 项目(每个命名空间一个,每个包含多个运行时class 接口和单独的 .IDL/.h/.cpp 文件,如上所述。然后我在我的单个 C#/UWP 应用程序中引用所有项目(项目到项目)。
我实际上正在尝试实现一个用户界面,以允许我利用 math/engineering C++ classes 的大型代码库,这些代码库实现了已经存在的非常具体和专有的电子电路模拟类型并用 C++ 编程并编译为控制台应用程序。与生成输出的处理相比,输入和输出的用户数据相对较小。
看起来您正在正确处理 idl 文件,并且这种行为与我直接添加新 Midl 文件时所经历的相同。
如果您喜欢 .h 和 .cpp 文件的外观 "under" 树中的 .idl 文件,您可以尝试添加新的视图模型而不是新的 Midl 文件。这将创建所有具有相同名称的 .idl/.h/.cpp 文件,并将 .h 和 .cpp 文件直观地放置在 Midl 文件下。您通过这种方式获得的 idl 模板适用于基本运行时 class.
Visual Studio 2019。Windows 运行时组件 C++/WinRT 项目。
我如何遵循和实施建议:"We recommend that you declare each runtime class in its own Interface Definition Language (IDL) (.idl) file, in order to optimize build performance when you edit an IDL file, and for logical correspondence of an IDL file to its generated source code files. Visual Studio merges all of the resulting .winmd files into a single file with the same name as the root namespace. That final .winmd file will be the one that the consumers of your component will reference."
https://docs.microsoft.com/en-us/windows/uwp/cpp-and-winrt-apis/author-apis
在同一个项目中,我可以使用项目->添加新项->中间文件 (.idl) 添加第二个(第三个等等).IDL 文件。这似乎工作正常?!然后,我为每个 .IDL 文件手动添加关联的 .h 和 .cpp 文件。构建以生成存根文件,然后在成功的最终构建之前手动复制和 "fill in" 这些文件。通过这种方式,每个运行时我都有一个 IDL 文件 class 及其关联的 header 和实现文件,包括实现所需的任何其他文件(c++ .h 和 .cpp 文件)。因为我需要向界面添加功能,所以我只编辑 IDL 文件,重建并向 header 和实现 C++ 文件添加功能。
这是推荐的吗?!?
当我添加 .IDL 文件然后手动添加关联的 .h 和 .cpp 时,它们不会出现 "under" .IDL 文件,就像我创建新项目时原始文件那样。这只是 Solution Explorer 的视觉效果,还是表明我有问题?!?
我计划有多个 "C++/WinRT WRC" 项目(每个命名空间一个,每个包含多个运行时class 接口和单独的 .IDL/.h/.cpp 文件,如上所述。然后我在我的单个 C#/UWP 应用程序中引用所有项目(项目到项目)。
我实际上正在尝试实现一个用户界面,以允许我利用 math/engineering C++ classes 的大型代码库,这些代码库实现了已经存在的非常具体和专有的电子电路模拟类型并用 C++ 编程并编译为控制台应用程序。与生成输出的处理相比,输入和输出的用户数据相对较小。
看起来您正在正确处理 idl 文件,并且这种行为与我直接添加新 Midl 文件时所经历的相同。
如果您喜欢 .h 和 .cpp 文件的外观 "under" 树中的 .idl 文件,您可以尝试添加新的视图模型而不是新的 Midl 文件。这将创建所有具有相同名称的 .idl/.h/.cpp 文件,并将 .h 和 .cpp 文件直观地放置在 Midl 文件下。您通过这种方式获得的 idl 模板适用于基本运行时 class.