【问题标题】:Calling C# .NET Service From C++ Application?从 C++ 应用程序调用 C# .NET 服务?
【发布时间】:2011-05-19 16:00:46
【问题描述】:

我有一个用 Visual Studio 6 编写的旧 MFC 应用程序。这将在某个时候用 C# .NET 重写。但是,在此之前,我必须为现有应用程序编写几个新的 Windows 服务。其他的都是用 ATL 编写的。我更愿意做的是用 C# .NET 编写这些新服务,这样当应用程序的其余部分被重写时,这些就不需要了。

是否可以从旧应用程序调用 .NET Windows 服务中托管的库上的接口?如果是这样,请您解释一下如何。

【问题讨论】:

    标签: c# .net c++ mfc windows-services


    【解决方案1】:

    当然。您正在寻找一个名为 COM-Interop 的 .NET 功能。

    http://msdn.microsoft.com/en-us/library/kew41ycz%28v=vs.71%29.aspx

    http://msdn.microsoft.com/en-us/magazine/cc163494.aspx

    第二个链接有一个 ATL 示例。

    编辑: 根据您在 cmets 中的反馈,让我对此进行扩展...

    啊 - 你对那个页面上的示例是正确的。

    第一个链接是您真正想要了解所有细节的地方。如果你点击链接,你会找到这个页面:

    “向 COM 公开 .NET Framework 组件” http://msdn.microsoft.com/en-us/library/zsfww439%28v=vs.71%29.aspx

    本质上,只需将一系列属性应用于您的类和属性,然后在客户端计算机上生成适当的注册表项(.NET 有一个工具可以做 - 请参阅:http://msdn.microsoft.com/en-us/library/bctyca52%28v=vs.71%29.aspx

    我自己已经为需要从 VC++ 和/或 VB6 调用的 .NET 项目完成了几次。

    其他一些可能感兴趣的链接:

    http://www.codeproject.com/KB/COM/nettocom.aspx

    http://www.codeproject.com/KB/COM/Universal_CCW.aspx

    【讨论】:

    • 这不是相反吗?它从 .NET 调用 COM 组件。我想做相反的事情。我想编写一个 .NET 服务并从 C++ 调用它。
    • 非常感谢您的帮助。
    【解决方案2】:

    我已经在 Visual Studio 2008 中使用基于 MFC 的 C++ 应用程序和基于 .NET 的 C# Windows 服务完成了这一工作。

    首先,如果您还没有创建 C# Windows 服务,我有几个教程用于创建基本框架。 first tutorial 提供了创建服务并将事件写入特定于应用程序的事件日志的分步过程。 second tutorial 展示了如何修改服务以从命令行安装和卸载自身,我觉得这很有用。

    其次,您需要决定如何在 MFC 应用程序和 Windows 服务之间进行通信。任何类型的进程间通信 (IPC) 模型都可以工作 - 套接字、管道、共享内存、WCF 等。由于您无论如何都想迁移到 .NET,我建议使用 Windows Communication Foundation (WCF),它是我已经做到了。具体来说,我根据here 所示的图表为我的通信方法选择了 WCF 的命名管道方面。

    如果您采用 WCF 路线,您将受益于应用程序和服务之间的通信是基于 .NET 的事实。因此,当您将应用程序迁移到 .NET 时,不必重写通信机制。与此同时,诀窍是让您的 MFC 应用程序使用 WCF 代码。为此,请使用 C# 在 .NET 程序集中编写 WCF 客户端代码。然后,使用 C++ dll 来弥补 MFC 代码和 .NET 程序集之间的差距。我收到了another tutorial,其中包含有关如何执行此操作的分步说明。

    希望这会有所帮助。

    【讨论】:

    • 非常感谢。非常感谢教程和帮助。
    • 虽然我点击了另一个答案作为我的“首选”答案,但这确实是共同努力的结果,但我只能点击一个。感谢您对此的帮助。
    猜你喜欢
    • 1970-01-01
    • 2013-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-30
    • 2011-10-29
    • 1970-01-01
    相关资源
    最近更新 更多