【发布时间】: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