在C#WPF应用程序中使用C ++ 11库有哪些选择?

时间:2014-02-17 04:11:33

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

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

目前,该应用程序在两个平台上作为控制台应用程序运行。应用程序执行一些CPU密集型工作并为进度报告提供回调,并在完成时实例化表示处理结果的项集合(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#的经验,但我不确定我是否缺少更好的选项,或者上述哪种方法是合理的方法。

1 个答案:

答案 0 :(得分:3)

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