我正在用C++11编写一个跨平台(OS和Windows)桌面应用程序,我打算在这两个平台上使用相同的C++11核心,使用UI的本机框架(Cocoa和Objective on OS和WPF和C#在Windows上),因为我认为最好的用户体验是本地的。
目前,该应用程序在两个平台上都作为控制台应用程序运行。该应用程序执行一些CPU密集型工作,并为进度报告提供回调,并在完成后实例化表示处理结果的项集合(std::vector<std::unique_ptr<Item>>)。
我的目标是让C++11库以与MVC和MVVM模式兼容的方式作为UI的模型。
UI必须:
我看过WinRT,似乎桌面应用程序中没有太多的信息可供使用。我也不喜欢在C++中创建UI本身的想法。我的目标是从C++应用程序中获取数据,并使用C#处理UI,因为我认为这是使用WPF的一种更有效的方法。
我知道P/Invoke,但我的理解是它只适用于C接口。在C++11周围创建这样一个接口似乎很麻烦。
我也知道C++/CLI,但我不确定它是否能满足我的需求,或者它是否与C++11兼容。
我看了一下CppSharp,但它似乎是一项正在进行的工作,我怀疑我是否知道如何解决可能出现的任何问题。
我有很多使用C++的经验,也有一些C#的经验,但是我不确定我是不是错过了更好的选择,或者以上哪一种方法是正确的。
发布于 2014-02-17 13:34:55
大口可以为C++代码生成C#包装器。我没有使用它的经验,所以我不知道它有多好。
我相信当前版本的SWIG (Version2.x)至少有一些C++11支持,但是您可能需要使用开发版来提供全面支持。
发布于 2014-02-17 14:03:23
答案的一部分..。
大多数情况下,在解决这个问题的时候,你会用3层来完成。
P/Invoke是指本机代码和托管代码之间的调用,但在这种结构中,它们是在层(2)内部发生的。Layer (2)以前是托管的C++,但现在被C++/CLI所取代。每个层都可以轻松地与它旁边的层对话,但是(1)不容易与(3)交谈,反之亦然。
你可能会发现一种产品能做你想做的事情,但我不知道。更有可能的是,您将不得不用这种分层结构来编写所需的东西。
我用不同代的托管C/C++完成了这个3+,我们有一个这样构建的商业产品(遗留的C/C++ <=> ASP.NET/remoting)。每一代,管理层是不同的,但总体结构保持不变。编辑
我建议:写一些代码,但计划扔掉它。实验是有必要的。
发布于 2014-02-18 08:49:49
Windows上的原生UI是什么?WPF看起来不是“标准”,winforms和MFC都死了,就像Silverlight一样。可以说,现在最原生的应用程序是HTML,尤其是当您正在编写Windows8瓷砖时。
因此,我的建议是使用wxWidgets,它使用本机控件来呈现。你的UI看起来像一个传统的Windows程序,而不是一个“现代”程序,但这就是你所追求的,不是吗?
如果仍然需要对GUI使用WPF,则可以编写调用C++ dll的C++/CLI接口包装器,或者可以将dll公开为服务,并让WPF对其进行套接字(或其他RPC)调用。如果它非常喋喋不休,这将不是最好的解决方案,但如果它很少,长时间的调用,那么它的理想。服务也是将web前端绑定到dll的最佳解决方案,不过在本例中,我会将服务公开为WWS web服务。
https://softwareengineering.stackexchange.com/questions/229183
复制相似问题