【问题标题】:Delphi - multiple remote com objectsDelphi - 多个远程 com 对象
【发布时间】:2011-10-05 21:57:01
【问题描述】:

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

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

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

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

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

参数必须是常量,我怎样才能给它们赋值呢?或者这是不可能的,因为它们是常数。

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

任何帮助将不胜感激。我什至不确定目前是否可行,我正在尝试配置 DCOM 但没有成功。

【问题讨论】:

  • 如果您已将来自共享的快捷方式放在计算机上并从那里运行应用程序,那么您不会远程处理任何内容,请创建一个本地 COM 对象。您可以将变量作为 const 参数传递。见StringToGUID
  • @Sertac,如果这里的问题是How do I convert the String into a TGUID ?,那么您的评论就是答案;)
  • @TLama - 看着标题,我会说,我不清楚问题是什么.. 感谢您的投票:)
  • StringToGUID 函数很有用,谢谢,但我确实需要一个远程 COM 对象。用户需要能够远程连接到服务器,运行 (Bookings) 应用程序,该应用程序创建一个返回用户 PC 的远程 COM 链接,以启动本地 (Point of Sale) 应用程序。显然它这样工作得更快......
  • @notidaho ...The parameters must be constant, so how can I assign them variable? 只需给参数赋值任何有效值,参数标记为const 并不意味着它不能是变量值,它只是意味着编译器赢了不要让您直接更改它,并且只能由CreateRemoteComObject 过程读取。所以你可以使用类似CreateRemoteComObject(MachineName,StringToGUID('{CA82B1FB-3D6C-4C16-871B-A6808A4D9F3A}')) whitou tproblems 的东西。

标签: delphi com guid dcom


【解决方案1】:

如您所说,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 现有代码配合使用就像一个魅力,最终客户喜欢速度和稳定性方面的结果。

【讨论】:

  • 感谢阿诺。这种方法除了 CreateRemoteComObject 之外,是否需要代码中的任何其他内容,否则我可以在现场向 IT 提出建议。显然,这不是理想的客户服务,但对于一个客户来说,这似乎有点超出我的想象。
  • @notidaho 当然,如果您有很多 DCOM 类要转换,这可能会导致大量代码重写。就我而言,只有一个,所以很容易做到。有了这样的解决方案,您就不再使用 DCOM。但是您必须重写服务器和客户端代码的某些部分。这不仅仅是一个 IT 问题 - 即使 IT 肯定更喜欢在网络上看到 HTTP 数据包而不是 DCOM。
  • 错误:远程应用程序服务器将使用您在 DCOMCnfg.exe 中指定的用户运行 - 当您使用正确的注册表设置安装服务器时,可以设置相同的属性。 DCOM 的许多问题源于其复杂性、文档稀缺以及开发人员/用户缺乏知识。我会在 DCOM 之前摆脱 D5。 D5 是这里真正古老的技术。
猜你喜欢
  • 1970-01-01
  • 2011-07-01
  • 2011-09-22
  • 2014-12-27
  • 2013-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多