【问题标题】:Wrapping a c#/WPF GUI around c++/cli around native c++围绕原生 c++ 围绕 c++/cli 包装 c#/WPF GUI
【发布时间】:2015-03-11 08:44:30
【问题描述】:

这是一种复杂的情况。我正在重构(从头开始)c++,它必须同时用作 CGI 脚本和独立应用程序的核心。

不幸的是,我从大学起就没有写过 C++,而且更熟悉 c#/Java。所以我打算将 WPF 用于 GUI。根据我的研究显示,这意味着我将:

1) 在非托管 C++ 中重构基础代码(支持智能感知,嗯?)

2) 将该基础封装在托管类库中

3) 在 C#/WPF GUI 中封装步骤 2,通过互操作 (CLI/CLR) 引用它。

第 2 步,我有信心,将有据可查。但是,我从头开始,找不到任何关于如何实例化和使用托管 c++ 中创建/公开的类的具体内容。

如果我有我的 druthers(不需要核心效率),我会用 c# 编写整个东西,但我没有这个选择。

有人可以为我指出第 3 步的正确方向,以便我可以开始研究它吗?我不想让任何人为我做作业(可以这么说),但我自己对这个过程的研究没有结果。

【问题讨论】:

  • 注意:托管 C++ 不再存在。 C++/CLI 是它的替代品。前者是 C++ 的扩展,后者是一种全新的语言。使用“托管 C++”可能会导致混淆,因为人们会认为您在谈论 Visual Studio 2003

标签: c# wpf c++-cli interop native


【解决方案1】:

如果您将非托管 C++ 类包装在托管 CLI/C++ 对象中,则不需要 Interop 来调用托管类(Visual C++ 将在同一个库中编译托管和非托管 C++)。

只需将混合托管/非托管库引用到托管 C# 应用程序,公开的托管对象就会像任何普通对象一样工作。

要了解一个好的起点,请查看this 文章。

【讨论】:

  • 所以在 c# 和托管 c++ 之间移动时,我不必使用任何特殊的魔法来转换数据类型/内置类型?老实说,这让我松了一口气。
  • @Eric 我的意思是,这取决于 CLI / C++ 类的公共接口有多复杂。它可以简单也可以复杂。
  • 由于最终的部署环境是 CGI(因此是双重包装),我将使其尽可能简单。再次感谢您的信息。
  • 我可能也有类似的情况;有谁知道如何自动生成 C++/CLI 包装类?在大型产品中,手动维护这些将是一场巨大的、无聊的、容易出错的噩梦。
  • @James Johnston SWIG 能够为 C++ 类生成包装器代码。它生成一些 C++ 互操作代码和相关的 C# 包装器代码。开始工作需要一些努力 - 你应该检查一下。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-13
  • 1970-01-01
  • 2014-10-09
  • 2011-07-27
  • 2021-03-15
  • 1970-01-01
相关资源
最近更新 更多