如何将(Delphi)OLE服务器与第二个客户端一起重用?

如何将(Delphi)OLE服务器与第二个客户端一起重用?,delphi,com,automation,service,ole,Delphi,Com,Automation,Service,Ole,我使用Delphi编写了一个OLE自动化服务器。我通常手动启动OLE服务器,并将其作为普通应用程序使用。我时不时地启动一个客户机 自动连接到现有的OLE服务器 当我终止客户端时,至少在客户端之前手动启动服务器时,服务器不会终止,但它不会接受任何其他OLE连接。启动另一个客户端将触发一个新服务器,而不是重用第一个服务器 如何将同一台服务器与第二台客户端重复使用 对问题进行编辑以正确地重新表述。在最初的版本中,我询问如何防止服务器终止,这不是一个好的公式当您作为正常应用程序启动服务器时,应该能够增加

我使用Delphi编写了一个OLE自动化服务器。我通常手动启动OLE服务器,并将其作为普通应用程序使用。我时不时地启动一个客户机 自动连接到现有的OLE服务器

当我终止客户端时,至少在客户端之前手动启动服务器时,服务器不会终止,但它不会接受任何其他OLE连接。启动另一个客户端将触发一个新服务器,而不是重用第一个服务器

如何将同一台服务器与第二台客户端重复使用


对问题进行编辑以正确地重新表述。在最初的版本中,我询问如何防止服务器终止,这不是一个好的公式

当您作为正常应用程序启动服务器时,应该能够增加自动化服务器的参考计数器。您希望实现两个目的:让服务器在客户端退出时不终止,也让服务器在客户端仍在运行时关闭主窗体时不终止。

当您作为正常应用程序启动服务器时,您应该能够增加自动化服务器的引用计数器。您希望实现两个目的:让服务器在客户端退出时不终止,也让服务器在客户端仍在运行时关闭主窗体时不终止。

将COM对象创建为Singleton。而且,为了使对象即使在客户机运行之后也能保持运行,请添加额外的引用计数。要执行此操作,请在COM对象内调用QI一次。

将COM对象创建为Singleton。而且,为了使对象即使在客户机运行之后也能保持运行,请添加额外的引用计数。要在COM对象中调用QI一次。

在客户端中,使用

ConnectKind:=ckRunningOrNew

并且应该使用现有服务器,而不是启动新服务器。

在客户端中,使用

ConnectKind:=ckRunningOrNew


并且应该使用现有服务器,而不是启动新服务器。

Delphi中的COM对象向导中有一个设置实例。允许的值为内部、多实例、单实例

我想对多个客户端重复使用同一个COM服务器。这就是为什么我选择了单实例,尽管我会为所有客户机提供一个服务器应用程序实例。但我错了。单实例意味着在我的服务器中只有一个COM连接实例。我应该选择多个实例来允许多个COM连接,但一个接一个,而不是在同一服务器中同时连接


我认为Delphi中COM对象向导中使用的词语并不十分清楚。与多实例、单实例相比,最好是像这样的多用途和单用途。

Delphi中的COM对象向导中有一个设置实例。允许的值为内部、多实例、单实例

我想对多个客户端重复使用同一个COM服务器。这就是为什么我选择了单实例,尽管我会为所有客户机提供一个服务器应用程序实例。但我错了。单实例意味着在我的服务器中只有一个COM连接实例。我应该选择多个实例来允许多个COM连接,但一个接一个,而不是在同一服务器中同时连接


我认为Delphi中COM对象向导中使用的词语并不十分清楚。代替多个实例,单个实例,最好是多用途和一次性使用,如在.

上一篇文章中的注释:“在Delphi中COM对象向导中有一个设置实例”:至少在C++ Builder中,这个选项可以在项目设置、项目ATL中简单地改变。只有在将第一个自动化对象添加到EXE ole服务器后,此项目才会出现在该服务器上


我还要求作者在第18条中提到这一点。

< P> >上一篇文章的注释:“在Delphi中COM对象向导中有一个设置实例”:至少在C++ Builder中,这个选项可以在项目设置、项目ATL中简单地更改。只有在将第一个自动化对象添加到EXE ole服务器后,此项目才会出现在该服务器上


我还要求的作者在第18项中提到这一点。

您还可以尝试更改启动OLE服务器的用户的身份(如果是Exe而不是dll),方法是运行dcomcnfg并选择组件服务/Computers/My Computer/DCOM Config,然后选择您的服务器


你可能不得不玩弄它,我记不清它们之间的区别,但我认为交互用户应该这么做。

如果启动OLE服务器的用户是Exe而不是dll,你也可以尝试更改用户的身份,通过运行dcomcnfg并选择组件服务/Computers/My Computer/DCOM Config并选择服务器

尤米
ght必须处理它,我记不清它们之间的区别,但我认为交互用户应该这样做。

如果启动服务器的两个客户端,会发生什么情况,相同的过程是否处理两个客户端,或者第二个服务器进程已启动?第二个服务器进程将自动启动。如果启动服务器的两个客户端,会发生什么情况?同一个进程是否处理两个客户端,或者第二个服务器进程是否已启动?第二个服务器进程将自动启动。我的问题不够精确。我现在已经编辑过了。但是谢谢你的回答:如果我让客户机启动服务器,并且我想在关闭客户机后保留服务器,那么它可能会很有用。我的问题不够精确。我现在已经编辑过了。但是谢谢你的回答:如果我让客户端启动服务器,并且我想在关闭客户端后保留服务器,那么这可能会很有用。谢谢你的回答,我不知道有这种可能性。但这似乎对我不起作用。目前,我正在使用javascript wsh编写的客户端进行测试,我想我正在使用的函数应该与此Delph设置类似,但它仅适用于第一个客户端。名称:并非所有客户端都使用Delphi编写的信息也属于此问题。感谢您的回答,我不知道有这种可能性。但这似乎对我不起作用。目前,我正在使用一个用javascript wsh编写的客户端进行测试,我想我正在使用一个函数,该函数应该像此Delph设置一样工作,但它只适用于第一个客户端。名称:并非所有客户端都是用Delphi编写的信息也属于这个问题。