【发布时间】: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 的东西。