我正在使用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进程(如果已经存在) - 但我似乎无法找到正确的方法来处理它。
有什么建议吗?
答案 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)
上周有一个问题,听起来可能与你的问题相反(想要重用应用程序,但不断变得新)。也许它可以让你开始走正确的道路?