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

4
我正在使用C++11编写一个跨平台的桌面应用程序(OS X和Windows)。我打算在两个平台上都使用相同的C++11核心,利用本地框架来实现UI(在OS X上使用Cocoa和Objective-C,在Windows上使用WPF和C#),因为我认为最好的UX体验是本地化的。
目前该应用程序在两个平台上都作为控制台应用程序运行。该应用程序执行一些CPU密集型工作,并提供进度报告的回调函数,完成后实例化一组代表处理结果的项目(std::vector<std::unique_ptr<Item>>)。
我的目标是让C++11库以与MVC和MVVM模式兼容的方式作为UI的模型。
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# WPF应用程序时想要使用一个C ++ 11库。 我该怎么做? - Deantwo
1个回答

3

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接