代码之家  ›  专栏  ›  技术社区  ›  Name

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

  •  1
  • Name  · 技术社区  · 17 年前

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

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

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

    (问题经过编辑以正确地重新表述。在原始版本中,我问如何防止服务器终止,这不是一个好的表述)

    6 回复  |  直到 17 年前
        1
  •  3
  •   Name    17 年前

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

    我想对多个客户端重复使用同一个COM服务器。这就是我选择“单实例”的原因,尽管我会为所有客户机提供一个服务器应用程序实例。但我错了。“单实例”表示在我的服务器中只有一个COM连接实例。我应该选择“多实例”来允许在同一台服务器中进行多个COM连接(但一个接一个,而不是同时进行)。

    我认为Delphi中COM对象向导中使用的词语并不十分清楚。与其说是“多实例”、“单实例”,不如说是这样的“多用途”和“单用途” article about OLE Server and VB

        2
  •  2
  •   Jim    17 年前

    在客户端中,使用

    ConnectKind := ckRunningOrNew

        3
  •  0
  •   mghie    17 年前

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

        4
  •  0
  •   Vinay    17 年前

        5
  •  0
  •   Grbts    16 年前

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

    (我也问过这本书的作者 This fine page

        6
  •  0
  •   Alan Clark    16 年前

    如果启动OLE服务器的用户是Exe而不是dll,您还可以通过运行dcomcnfg并选择Component Services/Computers/My Computer/DCOM Config并选择您的服务器来尝试更改该用户的身份。

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