【问题标题】:RTD Client on DelphiDelphi 上的 RTD 客户端
【发布时间】:2016-05-19 06:31:18
【问题描述】:

如何在 Delphi 上创建 RTD 客户端?我不知道如何开始,我需要像 Excel 电子表格一样获取值,类似于

=RTD("gartle.rtd",,"YahooFinanceWatchList","AAPL","Open")

【问题讨论】:

  • 您在这方面的哪一部分苦苦挣扎?我想知道你对COM有什么了解吗?如果没有,那么你需要在跑步之前学会走路。
  • 我想知道的一件事是您两次使用了客户端一词。你是说服务器吗?
  • 我对 COM 了解不多,我现在正在学习...我的意思是真正的客户,我正在尝试像 Excel 一样从应用程序中获取数据(作为我发布的功能)
  • Excel 是客户端。在您的示例中,gartle.rtd 是服务器。你真的是指客户吗?
  • 那就没那么难了。您需要创建 COM 自动化对象的实例并调用其方法。这些都有记录。但是,您可能已经为您的问题找到了错误的解决方案。使用网络服务接口来提取实时股票市场信息会容易得多。真的不用你在这里伪装成Excel。

标签: delphi com rtd


【解决方案1】:

这里说:http://support.microsoft.com/kb/285339 要为 Excel 提供 RTL 服务器,您需要实现 IRtdServer 接口,按照这种逻辑,您应该能够使用默认值实例化现有实现COM 方法自己。 (YMMV)

【讨论】:

  • 你有什么例子可以说明如何做到这一点吗?
  • @David:没错,但是 Excel 如何从 "gartle.rtd" 获得指向实现 IRtdServer 的对象的实时接口指针?如果 Excel 做到了(通过 plain COM 调用),我们也可以,但我认为我这里没有 RTD 提供程序可以检查。 @GPGomes,你能打开 regedit 并在 HKEY_CLASSES_ROOT 中搜索 gartle.rtd 吗?
  • 我没有足够清楚地阅读您的答案。看来你已经知道了。对不起。无论如何,大概可以创建这些 COM 对象之一。但这将是获取实时财务数据的一种非常模糊的方式!
【解决方案2】:

正如 Stijn 提到的,您需要创建一个实现 IRtdServer 的 COM 自动化对象。 Delphi 声明如下:

// *********************************************************************//
// Interface: IRTDUpdateEvent
// Flags:     (4416) Dual OleAutomation Dispatchable
// GUID:      {A43788C1-D91B-11D3-8F39-00C04F3651B8}
// *********************************************************************//
IRTDUpdateEvent = interface(IDispatch)
  ['{A43788C1-D91B-11D3-8F39-00C04F3651B8}']
  procedure UpdateNotify; safecall;
  function Get_HeartbeatInterval: Integer; safecall;
  procedure Set_HeartbeatInterval(plRetVal: Integer); safecall;
  procedure Disconnect; safecall;
  property HeartbeatInterval: Integer read Get_HeartbeatInterval write Set_HeartbeatInterval;
end;

// *********************************************************************//
// Interface: IRtdServer
// Flags:     (4416) Dual OleAutomation Dispatchable
// GUID:      {EC0E6191-DB51-11D3-8F3E-00C04F3651B8}
// *********************************************************************//
IRtdServer = interface(IDispatch)
  ['{EC0E6191-DB51-11D3-8F3E-00C04F3651B8}']
  function ServerStart(const CallbackObject: IRTDUpdateEvent): Integer; safecall;
  function ConnectData(TopicID: Integer; var Strings: PSafeArray; var GetNewValues: WordBool): OleVariant; safecall;
  function RefreshData(var TopicCount: Integer): PSafeArray; safecall;
  procedure DisconnectData(TopicID: Integer); safecall;
  function Heartbeat: Integer; safecall;
  procedure ServerTerminate; safecall;
end;

【讨论】:

  • 请阅读问题的 cmets。 Asker 想要做一个客户端而不是一个服务器。
猜你喜欢
  • 1970-01-01
  • 2023-03-08
  • 2021-03-04
  • 1970-01-01
  • 1970-01-01
  • 2011-04-05
  • 2022-07-10
  • 2013-08-05
  • 1970-01-01
相关资源
最近更新 更多