Как создать RTD-клиент на Delphi? Я понятия не имею, как начать, мне нужно получить значения почти как таблицу Excel, что-то вродеRTD-клиент на Delphi
=RTD("gartle.rtd",,"YahooFinanceWatchList","AAPL","Open")
Как создать RTD-клиент на Delphi? Я понятия не имею, как начать, мне нужно получить значения почти как таблицу Excel, что-то вродеRTD-клиент на Delphi
=RTD("gartle.rtd",,"YahooFinanceWatchList","AAPL","Open")
Он говорит здесь: http://support.microsoft.com/kb/285339, чтобы обеспечить сервер RTL в Excel вам нужно реализовать интерфейс IRtdServer
, по эта логика вам должно иметь возможность создавать экземпляр существующей реализации с использованием стандартных COM-методов самостоятельно. (YMMV)
Есть ли у вас пример того, как это сделать? – GPGomes
@David: точно, но как Excel получает от '" gartle.rtd "' прямой указатель интерфейса к объекту, который реализует IRtdServer? Если Excel делает это (через _plain_ COM-вызовы), мы тоже можем, но я не думаю, что у меня есть поставщики RTD для проверки. @GPGomes, можете ли вы открыть regedit и искать 'HKEY_CLASSES_ROOT' для' gartle.rtd'? –
Я недостаточно читал ваш ответ. Кажется, вы уже это знали. Сожалею. Во всяком случае, предположительно, можно создать один из этих COM-объектов. Но это был бы очень неясный способ получить финансовые результаты в реальном времени! –
Как упоминалось в 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;
Пожалуйста, прочитайте комментарии к вопросу. Asker хочет создать клиента, а не сервер. –
С какой частью этого вы боретесь? Интересно, знаете ли вы что-нибудь о COM? Если нет, то вам нужно научиться ходить до запуска. –
Одна вещь, о которой мне интересно, это то, что вы дважды использовали термин клиент. Вы имеете в виду сервер? –
Я не очень разбираюсь в COM, я сейчас изучаю ... И я имею в виду действительно клиент, я пытаюсь получить данные из приложения так же, как это делает Excel (как fuction, который я опубликовал) – GPGomes