通过COM启动和控制新的应用程序实例

时间:2009-02-02 18:22:09

标签: c# .net delphi com interop

我正在使用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进程(如果已经存在) - 但我似乎无法找到正确的方法来处理它。

有什么建议吗?

3 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

  

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

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

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

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

我正在使用Delphi 7,FWIW。

答案 2 :(得分:0)

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

How to reuse a Delphi ole server with a second client