C++CX 与 C++CLI - 是否可以从 C++CX 动态程序集访问动态 WUP C# dll?

C++CX vs C++CLI - possible to access dynamic WUP C# dll from C++CX dynamic assembly?

这听起来像是一个愚蠢的问题,因为我知道这两种语言的实现是完全不同的。但是,我有点不清楚细节。

我喜欢的 C++CLI 中一个非常好的功能是我可以拥有一个标准的 C# .NET 动态库并在 C++CLI 动态库中引用它,反之亦然。

似乎这种能力已经随着 C++CX 消失了,现在一切都必须通过 "Windows Runtime Components." 进行连接,但是,因为这些 "Windows Runtime Components" 旨在与 C++CX 之外的语言一起工作,并且C#,它们有严格的限制,比如没有虚拟方法(所有 类 必须密封在 Windows 运行时组件中)——对汇编间多态性的限制对我来说有点破坏交易,我想知道是否有些东西我还没有尝试过获得 C++CLI 的良好和流畅的互操作功能,或者如果 C++CX 的实现是如此不同以至于不可能再做这种事情了。

有没有一种简单的方法可以让我轻松地使用 C++CX 并与动态托管的 C# WUP 程序集互操作?或者这根本不是它的工作方式?

我非常喜欢 C++CLI,但对 C++CX 似乎无法以同样的方式工作感到失望 - 任何善于消除我对它们之间差异的困惑的人都会受到赞赏,尤其是,如果有一种方法可以桥接程序集而无需每次都编写 "Windows Runtime Component" 桥接,从而保留多态性功能。

不,你没有错过任何东西。从本地 c++ 以外的语言与 c++/cx 互操作的唯一方法是通过 windows 运行时。

WinRT 是一个基于接口的类型系统;通过接口 100% 支持程序集间多态性。

但是没有办法在 WinRT 中实现 public 实现 继承,如果这正是您正在寻找的(例如,C# 定义了一个具体的 Animal class,C++从中派生创建Mammal,然后C#再次派生创建Dog)。

但是您可以 IAnimal 进行常规实施,IMammal 进行常规实施,等等,并使用委派来重新使用实施细节。不像推导那样容易使用或干净​​,但至少在某些情况下是可能的。

你有你想做的那种继承的例子吗?