在 MFC 应用程序中托管 Windows 窗体 (C#) (VC++,VS6.0)

Posted

技术标签:

【中文标题】在 MFC 应用程序中托管 Windows 窗体 (C#) (VC++,VS6.0)【英文标题】:Host Windows Forms (C#) Inside MFC Application (VC++,VS6.0) 【发布时间】:2013-02-28 22:55:15 【问题描述】:

今天下午看了一大堆,没有得到任何切实的结果。是否可以在仍在使用 VC6 开发的 MFC 应用程序中托管 Windows 窗体对话框。

出现的问题是我们有一个大型应用程序从未使用新的 Visual Studio 升级,因为 VC6 始终可以正常工作。现在我们需要在其中添加一些 C# 功能。我无法执行 /clr 选项,因为我们的项目完全由非托管 C++ 组成。我在我们所有的库/头文件中搜索了“CWinFormsControl”,但没有找到任何东西。我不确定下一步该尝试什么。

另外,请原谅我在做研究以及对这种编程深度不熟悉时的任何无知。

我查看了以下文章:

http://msdn.microsoft.com/en-us/library/676cbawx(v=vs.100).aspx http://social.msdn.microsoft.com/Forums/en-US/vclanguage/thread/97fddc35-e94d-4587-8be0-0b573185eb63/ http://msdn.microsoft.com/en-us/library/ahdd1h97(v=vs.80).aspx http://www.functionx.com/visualc/Lesson04.htm http://social.msdn.microsoft.com/Forums/sk/vcgeneral/thread/c38db22e-cf61-4b47-bcc8-e6202c40d1b5

【问题讨论】:

【参考方案1】:

CWinFormsControl 需要 MFC 8.0。

您可以make your managed assembly a COM server(例如 ActiveX)并像任何其他 COM 服务器一样在 MFC 应用程序中使用它。

【讨论】:

按照我的指示,我得到了一个由我的 C# 对话框构建的 DLL。我现在如何在 C++ 中调用/初始化它?原谅我的无知。 CoCreateInstance,通过 early (#import +tlbexp) 或后期 bing (IDispatch) 调用表单的 ShowDialog 方法。【参考方案2】:

我没有 VC6 来尝试这个,但我认为这应该是可能的;至少对于一个简单的模式 ShowDialog() 场景。

您将使用 C++/CLI 创建一个新的程序集/DLL,并使用 /clr 标志进行编译。这将使用通常的__declspec(dllexport) 向您现有的 MFC 代码公开一个非托管 API。该实现将调用您的 C# 代码,该代码将在另一个程序集中存在。

【讨论】:

最好的方法是什么?我对此很陌生。任何指向正确方向的指针都会有所帮助。

以上是关于在 MFC 应用程序中托管 Windows 窗体 (C#) (VC++,VS6.0)的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Windows 窗体应用程序中显示 MFC 控件?

如何在Visual C ++中创建非托管Windows GUI?

将 Web Api 服务自托管到 Windows 窗体中

在 Windows 窗体应用程序中托管 ASP.NET Core API

非托管代码中的 Windows 窗体?

C# Windows 窗体无法在 Windows10 上加载非托管 C++ DLL