【问题标题】:C++CX vs C++CLI - possible to access dynamic WUP C# dll from C++CX dynamic assembly?C++CX 与 C++CLI - 可以从 C++CX 动态程序集访问动态 WUP C# dll?
【发布时间】:2016-01-29 11:12:30
【问题描述】:

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

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

C++CX 似乎已经失去了这种能力,现在一切都必须通过“Windows 运行时组件”进行接口。但是,由于这些“Windows 运行时组件”旨在与 C++CX 和 C# 之外的语言一起使用,因此它们具有严格的限制,例如没有虚拟方法(所有类都必须密封在 Windows 运行时组件中)——对汇编的限制多态性对我来说有点破坏交易,我想知道是否有什么我没有尝试获得 C++CLI 的良好和流畅的互操作功能,或者 C++CX 的实现是否如此不同以至于它不是可以再做这种事情了。

我是否缺少一种简单的方法来使用 C++CX 并轻松地与动态托管 C# WUP 程序集进行互操作?或者这根本就不是它的工作原理了?

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

【问题讨论】:

    标签: c# c++-cli interop win-universal-app c++-cx


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      但是,如果您正在寻找的是在 WinRT 中进行公共实现继承的方法(例如,C# 定义了一个具体的Animal 类,C++ 派生自它以创建 @987654322 @,然后 C# 再次派生以创建 Dog)。

      但是您可以将IAnimal 用于库存实现,将IMammal 用于库存实现等,并使用委托来重用实现细节。不像派生那样易于使用或干净​​,但至少在某些情况下是可能的。

      你有一个你想做的继承的例子吗?

      【讨论】:

        猜你喜欢
        • 2014-02-20
        • 1970-01-01
        • 2013-02-20
        • 2017-02-07
        • 2012-01-13
        • 1970-01-01
        • 1970-01-01
        • 2011-01-08
        • 1970-01-01
        相关资源
        最近更新 更多