Delphi - 多个远程com对象

时间:2011-10-04 11:38:22

标签: delphi com guid dcom

我的D5应用程序位于几个用户远程使用的服务器上,因此我需要使用以下函数创建一个COM对象,以便在启动时启动安装在该用户PC上的另一个应用程序(LmPos):

CreateRemoteComObject(const MachineName: WideString; const ClassID: TGUID): IUnknown;

而不是像以前一样创建本地COM对象:

EposServer := CreateOLEObject('POS.Server');

但是,要连接的MachineName和ClassID将取决于启动此应用程序的用户。我发现这有两个问题...

参数必须是常量,那么如何为它们分配变量?或者这是不可能的,因为它们是常数。

如果我要求用户输入,如何将String转换为TGUID?它似乎只接受格式:='{xxxx-xxxx-xxxx etc}'

非常感谢任何帮助。我现在还不确定这是否可行,我正在尝试配置DCOM但没有成功。

1 个答案:

答案 0 :(得分:2)

AFAIK服务器上的DCOM远程应用程序将始终在记录当前用户的情况下运行。

如果可以的话,摆脱DCOM。这是一种弃用的技术,Windows 7和2008 Server不喜欢它。您需要在PC上强制使用SMB 1协议,即便如此,我们也遇到了很多问题。

我最近遇到了一些与Delphi 5应用程序池类似的问题。我将现有Delphi 5应用程序的DCOM调用转换为HTTP服务,使用在Windows服务中运行的http.sys kernel-mode server(在服务器启动时启动,甚至在任何用户登录之前),以及WinHTTP用于客户端,它模仿了最初的DCOM类(所以客户端只改变了一个单元)。由于HTTP是无状态的,为了将事件从服务器推送到客户端,我在客户端类中添加了一个基于计时器的查询,以从服务器检索任何未决事件(500毫秒的时间足够且高效)。这个解决方案就像Delphi 5现有代码的魅力一样,最终客户就像速度和稳定性一样。