【问题标题】:Wrapping MFC native code for use in Managed Code包装 MFC 本机代码以在托管代码中使用
【发布时间】:2014-08-04 05:48:43
【问题描述】:

我有一个旧的 MFC 代码,我想从我的托管 C# WPF .Net 应用程序中调用它。为了包装本机代码,我发现我可以选择使用 1) P/Invoke 2) C++/CLI 或 3) COM。

但我还有一个担心。我读到,只要要包含从 MFC 派生的类,就必须构建 MFC 扩展 DLL。另外,这个 DLL 的调用方必须是 MFC 环境,我认为这意味着这个 DLL 在我的托管代码中是不可用的。

在我的应用程序中,我有从基本 MFC 类派生的类。我使用文档视图架构,我的 Doc、View、MainFrame、App 类都是从 MFC 类派生的。这是否意味着除了构建 MFC 扩展 DLL 之外我别无选择,并且无法在我的托管应用程序中使用此 DLL。 有什么建议可以解决这个问题吗?

【问题讨论】:

  • 我正在考虑在没有 MFC 的情况下重写本机代码。会有帮助吗?我希望能够将其编译为 dll,并从我的 C# .Net 应用程序中调用该 dll。
  • Pinvoke 不太可能有用,它不能调用 C++ 方法。由于您现有的代码不是 COM 可调用的,因此 COM 往往脱离了深层次。剩下的 C++/CLI,通常是最好的选择。所有关于扩展 DLL 的正常 MFC 喧嚣都适用,没有区别。
  • @HansPassant,但从托管代码引用时,MFC 扩展 DLL 是否不可用?我正在尝试确定是否需要摆脱本机代码中的 MFC 部分,并使用 WinAPI 将其重写为 Windows 应用程序
  • C++/CLI 可以调用任何本机 C++ 代码。使用MFC框架没关系。

标签: .net dll mfc unmanaged managed


【解决方案1】:

为什么不将 MFC 代码封装在 MFC ActiveX 项目中并使用互操作性从托管代码应用程序中调用它?对我来说似乎是最简单的解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-13
    • 2016-08-20
    • 1970-01-01
    • 2023-04-01
    • 2011-02-28
    • 2011-01-29
    • 2013-01-05
    相关资源
    最近更新 更多