【问题标题】:Automatic mapping between Native C++ classes and WinRT Components (ref classes)?本机 C++ 类和 WinRT 组件(参考类)之间的自动映射?
【发布时间】:2012-11-29 04:52:07
【问题描述】:

假设我已经用纯原生 C++ 编写了我的 BL(表达的目的是在其他平台上重用它),现在我想将某些类公开为 WinRT 组件(以便我可以用 C# 编写 UI)。

是否有任何代码生成器会自动为给定的本地 C++ 类生成等效的“引用类”(WinRT 组件),并生成将一组属性从一个复制到另一个的映射代码(有点像 AutoMapper对 .NET POCO 有用吗?)

【问题讨论】:

  • 不可用。也许有一天,但我不会为此屏住呼吸。由于要处理的类型集有限,语言投影从 WinRT 到 C++/CX 运行良好,但反之则不行。并且可靠地解析 C++ 所需的工具(如 Edison 的工具)需要花费大量精力。
  • "自动生成等效的 'ref classes'" - ref classes 总是被引用计数。鉴于该属性,每个 C++ 类都不能有一个等效的 ref class。 C++ 中的多重继承也很难映射到 WinRT 类型系统。除非您的 C++ 实现通过定义明确的 ABI(如 COM)公开其服务,否则您不能指望任何工具介入并提供帮助。 COM TypeLibs、.winmd 文件和 .NET 的元数据使用定义明确的 ABI。这就是为什么您可以为每一个找到自动转换工具的原因。

标签: c++ windows-runtime winrt-xaml c++-cx


【解决方案1】:

没有这样的工具,WinRT 和 Cx 的想法也不是需要一个。我想说这是您在原生 C++ 逻辑中的架构责任的一部分。

针对 Windows 8 的 WinRT 和 C++ 环境如何帮助您:

  • 您可以轻松地将 ISO C++ 代码与基于 Cx/WinRT 的 C++ 代码混合,潜在方向是一个包装器
  • 您可以使用 WRL 和一些 COM 魔法在 100% ISO C++ 中编写 WinRT 组件,这可以帮助您重新考虑 BL 以使其适应新目标

以下链接是 WRL 模板库的指针:

http://channel9.msdn.com/Events/Windows-Camp/Developing-Windows-8-Metro-style-apps-in-Cpp/The-Windows-Runtime-Library-WRL-

http://msdn.microsoft.com/en-us/library/vstudio/hh438466.aspx

【讨论】:

  • 凭借我的 StackOverflow 声誉,我无法在主要答案中添加更多链接,但下面的附加链接表示直接发送给 Microsoft 和 Visual Studio 人员的类似请求:visualstudio.uservoice.com/forums/121579-visual-studio/… 那里的评论和与 ABI 相关的附加链接可能会有所帮助你最好理解其中的原理。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-27
  • 2011-06-15
  • 1970-01-01
  • 2015-07-14
  • 2012-12-13
  • 2013-04-30
  • 2011-11-20
相关资源
最近更新 更多