首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C++11 WPF应用程序中使用C#库的选项有哪些?

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

Software Engineering用户
提问于 2014-02-16 18:44:06
回答 3查看 4.1K关注 0票数 5

我正在用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必须:

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

我看过WinRT,似乎桌面应用程序中没有太多的信息可供使用。我也不喜欢在C++中创建UI本身的想法。我的目标是从C++应用程序中获取数据,并使用C#处理UI,因为我认为这是使用WPF的一种更有效的方法。

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

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

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

我有很多使用C++的经验,也有一些C#的经验,但是我不确定我是不是错过了更好的选择,或者以上哪一种方法是正确的。

EN

回答 3

Software Engineering用户

发布于 2014-02-17 13:34:55

大口可以为C++代码生成C#包装器。我没有使用它的经验,所以我不知道它有多好。

我相信当前版本的SWIG (Version2.x)至少有一些C++11支持,但是您可能需要使用开发版来提供全面支持。

票数 2
EN

Software Engineering用户

发布于 2014-02-17 14:03:23

答案的一部分..。

大多数情况下,在解决这个问题的时候,你会用3层来完成。

  1. 本地C/C++层,可以调用Windows、COM或C++库
  2. 一个托管C/C++层,可以访问C#对象模型和框架
  3. C#层,因为在C#中实际使用.NET框架和WPF更容易。

P/Invoke是指本机代码和托管代码之间的调用,但在这种结构中,它们是在层(2)内部发生的。Layer (2)以前是托管的C++,但现在被C++/CLI所取代。每个层都可以轻松地与它旁边的层对话,但是(1)不容易与(3)交谈,反之亦然。

你可能会发现一种产品能做你想做的事情,但我不知道。更有可能的是,您将不得不用这种分层结构来编写所需的东西。

我用不同代的托管C/C++完成了这个3+,我们有一个这样构建的商业产品(遗留的C/C++ <=> ASP.NET/remoting)。每一代,管理层是不同的,但总体结构保持不变。编辑

我建议:写一些代码,但计划扔掉它。实验是有必要的。

票数 1
EN

Software Engineering用户

发布于 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服务

票数 0
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/229183

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档