【问题标题】:Using MFC in a "managed C++" application在“托管 C++”应用程序中使用 MFC
【发布时间】:2014-08-10 22:04:20
【问题描述】:

我们的产品之一是 C++ 应用程序 - 使用 MFC (MDI)。 (我们使用 Codejock 为应用程序皮肤。)

有人问我是否可以“将应用程序移植到 .NET” - 这样就可以使用例如 C# 库和其他 .NET 功能。我知道有一种叫做“C++.NET”的东西——或者(如果我理解正确的话)它现在应该被称为“托管 C++”。但我对此了解不多。

我的问题:这可能吗?我们可以将 MFC 应用程序作为“托管 C++”运行吗? (并且可以将使用 Codejock 的应用程序作为“托管 C++”应用程序运行吗?)还有其他一些关于此的线程,但我一直无法找到“明确的答案”...

我会非常感谢一些好的建议! :-)

【问题讨论】:

  • 我认为linked question 是一个好的开始,但它不是重复的,因为那里没有MFC GUI,而您显然在问如何集成. NET 的东西到 MFC GUI 应用程序中。 你在问这个吗?
  • 也许您应该重新考虑将标题重命名为“使用 MFC/Codejock 应用程序中的 .NET 库”

标签: mfc c++-cli managed-c++


【解决方案1】:

据我了解,您希望保留 MFC/Codejock GUI 并允许使用应用程序的 C++ 代码中的 .NET 库。

这确实是可能的,但对于当前编译为“本机”C++ 的完整应用程序,将其全部转换为使用C++/CLI 编译可能不是一个好主意。 “It Just Works (IJW)”是一个不错的模因,但它并不总是有效:-)

我们有同样的情况,即需要调用 .NET 程序集的 C++/MFC/Codejock 应用程序。这几乎没有问题:

  • 我们有 C++/CLI 模块,它们提供本地 C++ DLL 接口供本地 C++ 代码调用,然后将这些调用路由到用 C# 编写的程序集。
  • 我们还有 C++/CLI 程序集,它们为 C# 代码提供 .NET 接口,然后回调到纯本机模块中。

还应该可以有一个本地编译的(例如,exe)项目,并且您只为需要托管互操作的选定cpp 文件启用/clr 开关。最后,您将所有内容联系在一起。由于我们从未将它以那种方式混合,因此我无法真正谈论这种方法。我可以肯定说的是,可以将模块上的部分编译为/clr,并将部分编译为本地。

【讨论】:

  • 我可以确认这一点,我们有一个大型 MFC 应用程序,只有使用托管代码的特定源,只有这些源标有 /clr
  • 感谢您提供重要信息! :-) 好吧,管理层的“对 .NET 的需求”有点含糊……正如您所说,研究这个问题的一个原因是能够使用 .NET 库。正如我从链接中看到的那样,这不是问题。但他们的愿望清单上还有其他事情: (1) 使用 .NET GUI 组件。 (.NET 中有更多可供选择。) (2) 他们正在考虑用 .NET 完全替换 MFC/Codejock。 (我们有另一个运行 .NET 的应用程序,他们认为在客户计算机上只维护一个环境会很好。)您的 ...
  • ...对此有何看法? (1) 是否可能 - .NET GUI 组件(Microsoft 或第三方)会在 MFC 框架中运行吗?并且(2)将需要进行重大重写。 (或者我错了吗?)在我看来,在 C++/CLI 中没有太多理由这样做;最好对 C# 做一个完整的移植。
  • 是的,您可以在 MFC 应用程序中使用 .NET GUI 组件。据我所知,混合它们并非易事(我们在某处做,但不是在我熟悉的代码领域)。
  • “用 .NET 完全替换 MFC/Codejock” - 这实际上是对应用程序的 GUI 部分的完全重写。除非针对非常小的应用程序,否则无法想象有人会为此做商业案例。 YMMV。
【解决方案2】:

几年前我遇到过类似的问题,发现除非从非托管转换为托管或反向的琐碎案例真的很痛苦。我最终将这两个世界各自放在一边,并简单地使用互操作来获得 COM - .NET 的兼容性。

这不是很好,但便宜很多。结论是我们应该等待一个重大的演变来考虑完全重写。

【讨论】:

  • 编写 C++/CLI 互操作程序集相当轻松,而且几乎是微不足道的。它允许您为本地代码提供托管接口,反之亦然。建议为任一方向编写单独的互操作程序集,但您也可以使用单个程序集。混合模式程序集具有应用程序可以链接到的本机和托管导出。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-07
  • 1970-01-01
  • 2010-10-24
  • 1970-01-01
  • 2013-03-23
相关资源
最近更新 更多