我有一个用Visual Studio 6编写的旧MFC应用程序。这将在某些时候用C#.NET重写。但是,在此之前,我必须为现有应用程序编写几个新的Windows服务。其他人都是用ATL写的。我更喜欢做的是在C#.NET中编写这些新服务,以便在重写应用程序的其余部分时,不需要这些服务。
是否可以从旧应用程序调用.NET Windows服务中托管的库上的接口?如果是的话,请你解释一下。
答案 0 :(得分:4)
绝对。您正在寻找一个名为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示例。
编辑: 根据您在评论中的反馈,让我展开这个......
啊 - 你对该页面上的样本是正确的。
第一个链接确实是您想要开始所有细节的地方。如果您点击链接,您将找到此页面:
“将.NET Framework组件暴露给COM” 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< - 您正在尝试做的完美示例。
答案 1 :(得分:4)
我在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提供了有关如何执行此操作的分步说明。
希望这有帮助。