【问题标题】:Create COM Surrogate server (exe) in C#在 C# 中创建 COM 代理服务器 (exe)
【发布时间】:2014-04-03 15:10:14
【问题描述】:

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

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

【问题讨论】:

    标签: c# .net com


    【解决方案1】:

    COM 的默认代理进程 - 托管 COM DLL 的东西,也就是 COM Surrogate - 是 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 调用。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        如果您想要一个进程外 COM 组件,一个选项是通过serviced components 在 COM+ 中托管一个 dll。虽然这仅支持 dll,但您可以编写一个简单地遵循 dll 的 shell exe(供独立使用)。

        不像VB那么简单,但它可以工作。

        我确实记得有人向我展示了一种更直接的方式(没有 COM+),但我终其一生都不记得那是什么......

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-12-17
          • 2011-11-10
          • 2023-03-25
          • 2010-12-17
          • 2011-11-16
          • 1970-01-01
          • 2012-04-19
          • 2011-12-30
          相关资源
          最近更新 更多