【问题标题】:What are my options for using a C++11 library in a C# WPF application?在 C# WPF 应用程序中使用 C++11 库有哪些选择?
【发布时间】:2014-02-17 04:11:33
【问题描述】:

我正在用 C++11 编写一个跨平台(OS X 和 Windows)桌面应用程序。我打算在两个平台上使用相同的 C++11 核心,利用原生 UI 框架(OS X 上的 Cocoa 和 Objective-C 以及 Windows 上的 WPF 和 C#),因为我相信最好的 UX 体验是原生的。

目前,该应用程序作为控制台应用程序在两个平台上运行。该应用程序执行一些 CPU 密集型工作并为进度报告提供回调,并在完成时实例化表示处理结果的 Items (std::vector<std::unique_ptr<Item>>) 集合。

我的目标是让 C++11 库以与 MVC 和 MVVM 模式兼容的方式充当 UI 模型。

用户界面必须:

  • 允许用户选择要处理的文件(打开文件对话框并将文件路径发送到 C++ 库)
  • 显示进度(处理来自 C++ 库的回调以更新进度条)
  • 在 WPF 表单中显示结果(访问 Item 类并显示它提供的信息)

我查看了 WinRT,似乎没有很多信息可用于桌面应用程序。我也不喜欢用 C++ 创建 UI 本身的想法。我的目标是让数据进出 C++ 应用程序并使用 C# 处理 UI,因为我相信这是使用 WPF 的更有效方式。

我知道 P/Invoke,但我的理解是它只适用于 C 接口。围绕 C++11 创建这样一个接口似乎很麻烦。

我也知道 C++/CLI,但我不确定这是否能满足我的需求,或者它是否与 C++11 兼容。

我查看了CppSharp,但它似乎正在进行中,我怀疑我是否知道如何解决可能出现的任何问题。

我在 C++ 方面有很多经验,在 C# 方面也有一点经验,但我不确定我是否缺少更好的选择,或者以上哪种方法是合理的。

【问题讨论】:

标签: c# c++ wpf windows c++11


【解决方案1】:

我强烈推荐使用 C++ 互操作 (http://msdn.microsoft.com/en-us/library/2x8kf7zx.aspx)。我已经用过几次了,它相当简单。在所有情况下,我都在 WinForms 应用程序中使用它,而不是 WPF,但我认为这不会成为问题。您将需要在您的内部 CPP 实现上创建一个托管包装器。为此,您将需要使用 C++/CLI。而且您需要在 .NET 和 C++ 本机类型之间编组您的参数。有一堆辅助函数和智能指针可以帮助解决这个问题。您的其余代码可以是本机代码,并且会照常编译。

【讨论】:

    猜你喜欢
    • 2012-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-24
    • 1970-01-01
    相关资源
    最近更新 更多