2014-11-06 1 views
0

Как создать RTD-клиент на Delphi? Я понятия не имею, как начать, мне нужно получить значения почти как таблицу Excel, что-то вродеRTD-клиент на Delphi

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

С какой частью этого вы боретесь? Интересно, знаете ли вы что-нибудь о COM? Если нет, то вам нужно научиться ходить до запуска. –

+0

Одна вещь, о которой мне интересно, это то, что вы дважды использовали термин клиент. Вы имеете в виду сервер? –

+0

Я не очень разбираюсь в COM, я сейчас изучаю ... И я имею в виду действительно клиент, я пытаюсь получить данные из приложения так же, как это делает Excel (как fuction, который я опубликовал) – GPGomes

ответ

1

Он говорит здесь: http://support.microsoft.com/kb/285339, чтобы обеспечить сервер RTL в Excel вам нужно реализовать интерфейс IRtdServer, по эта логика вам должно иметь возможность создавать экземпляр существующей реализации с использованием стандартных COM-методов самостоятельно. (YMMV)

+0

Есть ли у вас пример того, как это сделать? – GPGomes

+0

@David: точно, но как Excel получает от '" gartle.rtd "' прямой указатель интерфейса к объекту, который реализует IRtdServer? Если Excel делает это (через _plain_ COM-вызовы), мы тоже можем, но я не думаю, что у меня есть поставщики RTD для проверки. @GPGomes, можете ли вы открыть regedit и искать 'HKEY_CLASSES_ROOT' для' gartle.rtd'? –

+0

Я недостаточно читал ваш ответ. Кажется, вы уже это знали. Сожалею. Во всяком случае, предположительно, можно создать один из этих COM-объектов. Но это был бы очень неясный способ получить финансовые результаты в реальном времени! –

1

Как упоминалось в Stijn, вам необходимо создать объект автоматизации COM, который реализует IRtdServer. Декларации 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; 
+0

Пожалуйста, прочитайте комментарии к вопросу. Asker хочет создать клиента, а не сервер. –