在C#中创建COM Surrogate服务器(exe)

时间:2009-05-18 14:15:32

标签: c# .net com

我知道如何在C#中创建COM DLL(类库)。是否可以使用C#创建COM Surrogate EXE?

这将是一个独立的服务器,能够启动和托管COM对象,然后COM客户端可以访问它们。

3 个答案:

答案 0 :(得分:5)

COM的默认代理进程 - 承载COM DLL的东西,又名 COM代理 - 是dllhost.exe。可以在C ++中创建代理进程。 This article解释了如何。

但是这些API不会作为.NET Framework中基类库的一部分在包装器中公开。如果您想编写只编写托管代码,则需要其他内容。

我看到了几个选项。

  1. The Visual Studio SDK,免费下载,适用于想要扩展Visual Studio的开发人员。在该SDK中,有一个包含此类包装器的类库。特别要看the ISurrogate class 但是,VS SDK许可证表明SDK可以仅使用 来扩展或增加Visual Studio的价值。我不是律师,但这是我对许可证的理解,这很清楚。这些术语意味着VS SDK对于一般的应用程序构建没有用处 剩下的一个问题是,究竟如何使用VS SDK技术上仅使用C#代码生成COM代理?再次,这里我不知道。我简要地查看了文档中有关使用ISurrogate包装器的指南,但没有找到。
  2. 使用this article中的代码。
    本文探讨了COM和.NET互操作的一系列不同方面。在本文的最后,它提供了在C#中构建自己的COM服务器的源代码,包括对CoRegisterClassObject()和朋友的所有p / invoke调用。

答案 1 :(得分:4)

我想做同样的事情,并在All-In-One Code Framework上找到了优秀的项目示例CSExeCOMServer。它实际上通过.NET和对Windows API的本机调用来重建正常的COM服务器逻辑。但它看起来仍然过于复杂。我想在进程外服务器中没有简单快捷的方法将.NET对象公开为COM,而且它不是首选架构。

答案 2 :(得分:2)

如果您想要一个进程外COM组件,一个选项是通过serviced components在COM +中托管一个dll。这只支持dll,但你可以编写一个shell exe(用于独立使用),它只是简单地推送到dll。

不像VB那么简单,但它有效。

我确实记得有人向我展示了一种更直接的方式(没有COM +),但我不能为我的生活记住它是什么......