【问题标题】:Launching and controlling a new application instance via COM通过 COM 启动和控制新的应用程序实例
【发布时间】:2010-10-04 23:48:33
【问题描述】:

我正在使用 C#.NET 来启动和控制 Delphi 编写的可执行文件。 Delphi 应用程序有一个 COM 接口。

我已将 Delphi 可执行文件(我们将其称为 DelphiApp.exe)作为资源导入 Visual Studio。

以下 C# 代码有效 -- 如果没有其他 DelphiApp.exe 实例正在运行:

DelphiApp.DelphiAppClass da = new DelphiAppClass();
da.DoStuff(1, 3, 4); 

如果 DelphiApp.exe 的一个实例正在运行,上面的代码将“接管”其中一个实例,这不是我想要的。当我声明一个新的DelphiAppClass() 时,我总是希望它是一个新的应用程序实例。

我已经尝试了几种解决方法——比如如果已经存在一个新的 DelphiApp 进程,则启动一个新的进程——但我似乎找不到处理这个问题的正确方法。

有什么建议吗?

【问题讨论】:

  • 你能发布(部分)DelphiApp COM 类单元吗?
  • 你是这个意思吗? TTypedComObjectFactory.Create(ComServer, TDelphiApp, Class_DelphiApp, ciSingleInstance, tmSingle);

标签: c# .net delphi com interop


【解决方案1】:

当您创建您的 delphi 自动化服务器时,请确保您使用 ciSingleInstance 作为自动机对象构造函数中的第四个参数。例如:

TAutoObjectFactory.Create(ComServer, TTestServer, Class_TestServer,
  ciSingleInstance, tmApartment);

这将要求每个对象都为其创建一个新的自动化对象。

【讨论】:

    【解决方案2】:

    当你创建你的 delphi 自动化服务器时,确保你在自动机对象的构造函数中使用 ciSingleInstance 作为第四个参数。

    我已经在 OP 评论中发布了这个——在 Delphi 中,我使用这行代码来定义 COM 行为:

    TTypedComObjectFactory.Create(ComServer, TDelphiApp, Class_DelphiApp, ciSingleInstance, tmSingle);
    

    据我所知,这是在 COM 端进行设置的正确方法。 (如果没有,请告诉我我做错了什么!)

    我正在使用 Delphi 7,FWIW。

    【讨论】:

      【解决方案3】:

      上周有人问了一个问题,听起来可能与您的问题相反(想要重用应用程序,但不断更新)。也许它可以让你走上正确的道路?

      How to reuse a Delphi ole server with a second client

      【讨论】:

        猜你喜欢
        • 2014-10-07
        • 1970-01-01
        • 2014-01-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多