在C#WPF应用程序中使用C++11库的选项是什么
What are my options for using a C++11 library in a C# WPF application?
我正在用C++11编写一个跨平台(OS X和Windows)的桌面应用程序。我打算在两个平台上使用相同的C++11内核,使用本机框架进行UI(OS X上的Cocoa和Objective-C,Windows上的WPF和C#),因为我相信最好的用户体验是本机体验。
目前,该应用程序在两个平台上都作为控制台应用程序运行。该应用程序执行一些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++互操作(http://msdn.microsoft.com/en-us/library/2x8kf7zx.aspx)。我已经用过好几次了,它相当简单。在所有情况下,我都在WinForms应用程序中使用了它,而不是WPF,但我认为这不会是一个问题。您需要在内部CPP实现上创建一个托管包装器。为此,您需要使用C++/CLI。您还需要在.NET和C++本机类型之间封送参数。有一堆助手函数和智能指针可以帮助实现这一点。您的其余代码可以是本机代码,并将照常编译。
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- C++避免重复声明的语法是什么
- "perf_event_attr"结构的"read_format"属性的选项到底是什么?
- C++:构建选项"-j"是什么意思?
- 如何读取NM命令:NM选项-T和-U(未定义)是什么意思
- 在C++中向枚举添加"all"选项的好设计是什么?
- C 类通过C#中使用的UDP,该选项是什么
- GCC 编译 C/C++ 最强化的选项集是什么?
- 在C#WPF应用程序中使用C++11库的选项是什么
- C++重载运算符两次,一个返回非常量引用,另一个返回常量引用,首选项是什么
- strlen()的可选项是什么
- 获得快速的k对独立散列函数的选项是什么
- -lrt选项的用途是什么
- Visual Studio 中编译选项 /DPROFILE 和 /UPROFILE 的含义是什么Microsoft?
- 用于链接的VC 11.0命令链接选项是什么
- 设置"深度"配置选项的最佳方法是什么?
- g++编译器选项使用' pkg-config..的结果是-I(directory) -I是什么意思?
- old的-u选项是如何工作的,它什么时候有用
- BOOST程序选项命令行的格式是什么?
- OSX上TCP_USER_TIMEOUT的setsockopt选项名称是什么?