首先,介绍一些背景知识:
我决定从头开始一个新项目,这个项目可以在多种平台(Windows,iOS,OSX,Linux,Android)上运行。由于我的背景大多是C++,所以我打算用C++11编写核心功能,也就是说,在每个平台上,我都需要编写一个可以与C++核心互操作的特定于平台的UI。
我瞄准的第一个平台是Windows (第二个是iOS)。我将数据存储在SQLite数据库中,以及用户提供的数据,这些数据将使用WPF DataGrid输入(插入行、操作现有数据等)。这是我第一次使用WPF (尽管我使用过Windows Forms),也是我第一次在托管环境中使用C++。我计划让它成为一个MVC风格的架构,这样在我看来,SQLite就是模型,WPF就是视图,C++代码就是控制器。
我的问题是:
有没有什么例子可以说明如何使用C#和WPF从C++接口获取数据并显示出来,而不会破坏/破坏C++代码本身(因为它必须在多个平台上工作)?我读过一点关于P/Invoke (乏味,但有效)和混合程序集(有效,但会破坏我的C++吗?)但是当涉及到具体的例子(特别是那些涉及到用通过C++动态链接库获得的数据填充WPF控件)时,谷歌并没有什么帮助。
谢谢!
编辑:在搜索解决此问题的方法时,我遇到了CXXI。我不太熟悉它,但它似乎是我的问题的一个简单的解决方案。有什么想法吗?我对所有这些概念的理解是有限的。
发布于 2012-07-03 12:45:40
我曾经使用过XAML和WinForms,我认为你不会发现它比你的WinForms体验更“原生”。在这两种情况下,所有内容都由.Net抽象。但是如果你想学习WPF,那就去学吧。
P\invoke和COM一样工作得很好。至于将数据从C++转换为其他语言的其他方法,请考虑将其视为进程间通信问题,而不是语言问题。将一个进程作为另一个进程的子进程运行,查看sockets和库,比如0mq/clrzmq (see this for 0mq on iPhone--this for Android)和Thrift,让C++与另一个进程对话。
使用socket/0mq,您可以使用xml/json/Protobuf/Protobuf-net将对象从一种语言序列化和反序列化到另一种语言。使用Protobuf,您只需要创建一组json风格的数据对象,并使用特定于langauge的工具生成代码。这将照顾到跨平台和跨语言的数据对象,让您可以专注于有趣的东西。序列化也可以很好地与sql配合使用。所有这些技术都很容易实现,而且每种技术都有大量的语言实现,这使得您可以轻松地将这些东西连接到您的下一个GUI。
就示例而言,这完全取决于您希望如何在运行时之间移动数据。
https://stackoverflow.com/questions/11303712
复制相似问题