【问题标题】:What do I need to do to implement an "out of proc" COM server in C#?在 C# 中实现“out of proc”COM 服务器需要做什么?
【发布时间】:2010-09-07 00:52:18
【问题描述】:

我正在尝试实现一个用 C# 编写的“out of proc”COM 服务器。我该怎么做?

我需要 C# 代码从我的主 C++ 应用程序中“脱离 proc”,因为我无法将 .NET 运行时加载到我的主进程空间中

为什么?
我的 C++ 代码位于加载到许多不同客户 EXE 中的 DLL 中,其中一些使用不同版本的 .NET 运行时。由于只能将一个运行时加载到单个进程中,因此我最好的选择似乎是将我的 C# 代码放入另一个进程中。

【问题讨论】:

标签: c# com interop


【解决方案1】:

您可以使用 System.EnterpriseServices.ServicedComponent 创建 COM+ 组件。因此,您将能够创建进程外和进程内(客户端)组件激活以及池、远程处理、作为 Windows 服务运行等的所有 COM+ 优势。

【讨论】:

    【解决方案2】:

    Here 我们可以读到这是可能的,但是 exe 将作为库加载,而不是像 exe 那样在它自己的进程中启动。不知道这对你有没有问题?如果您确实想让它像一个真正的进程外 com 服务器一样,它还包含一些可能的解决方案。但也许使用另一种进程间通信方式会更好。喜欢 .Net 远程处理。

    【讨论】:

      【解决方案3】:

      我不推荐这种方式,但是您可以为您的 C# 库创建一个 COM 可调用的包装器,然后创建一个 VB6 ActiveX exe 项目,将调用委托给您的 C# 库。

      【讨论】:

        【解决方案4】:

        为什么不能将 .net 运行时加载到进程空间中?可以托管 .net 运行时并使用 COM 调用 .net。

        【讨论】:

        • 我的产品是其他公司使用的DLL。他们可能会使用各种版本的 .NET 运行时(或一些非 .NET 工具)来编写他们的应用程序。一次只能将一个版本的 .NET runtiem 加载到进程中,因此我希望避免为每个 .NET 运行时使用单独的 DLL 版本
        猜你喜欢
        • 1970-01-01
        • 2011-08-14
        • 2011-12-30
        • 2014-05-06
        • 1970-01-01
        • 1970-01-01
        • 2011-03-01
        • 2018-01-01
        • 2012-11-29
        相关资源
        最近更新 更多