Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> использование JACOB + RTD, не могу выполнить запрос 
:(
    Опции темы
polosatij
  Дата 27.7.2016, 09:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 22.2.2004
Где: Stuttgart<-> ;Karlsruhe, Germany

Репутация: 1
Всего: 8



доброе утро smile

пытаюсь из jacob-а дёрнуть RTD. в Экселе бы это выглядело так:

Код

=RTD("xrtd.xrtd",,"PRICE","514000,"ETR","BID")


в ява накидал следующий код:

Код

package solutions.javaee.stock.experiments;

import java.io.File;

import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;
import com.jacob.com.LibraryLoader;

// NOTE: run this program in Java x86!!!
public class JACOBGettingStarted {

    public static void main(final String[] args) {
     new JACOBGettingStarted().doExecute();
    }

    public void doExecute() {

        /**
         * `System.getProperty("os.arch")`
         * It'll tell us on which platform Java Program is executing. Based on that we'll load respective DLL file.
         * Placed under same folder of program file(.java/.class).
         */
//        final String libFile = System.getProperty("os.arch").equals("amd64") ? "../libs/jacob/jacob-1.18-x64.dll" : "../libs/jacob/jacob-1.18-x86.dll";

        try {
            /**
             * `System.setProperty(LibraryLoader.JACOB_DLL_PATH, temporaryDll.getAbsolutePath());`
             * Set System property same like setting java home path in system.
             *
             * `LibraryLoader.loadJacobLibrary();`
             * Load JACOB library in current System.
             */
            System.setProperty(LibraryLoader.JACOB_DLL_PATH, new File("libs/jacob/jacob-1.18-x86.dll").getAbsolutePath());
            LibraryLoader.loadJacobLibrary();

            // Create ActiveXComponent using CLSID. You can also use program id here.
            // Next line(commented line/compProgramID) shows you how you can create ActiveXComponent using ProgramID.
            // NOTE: found over 'http://www.nirsoft.net/utils/axhelper.html'
            final ActiveXComponent compCLSID = new ActiveXComponent("XRTD.XRTD");

            System.out.println("The Library been loaded, and an activeX component been created.");

            // Dispatch.put(compCLSID, "Visible", new Variant(true));
            // final Dispatch workbook = compCLSID.getProperty("Workbooks").toDispatch();
            // Dispatch.call(workbook, "Open", new Variant("C:\\Users\\tigraff\\Desktop\\RTD.Test.xlsx"));

            // final Variant fld = Dispatch.call(compCLSID, "", "PRICE", "514000", "LASW", "BID");
            // System.out.println(compCLSID.invoke("RTD", new Variant[] {}));
            // System.out.println(Dispatch.get(compCLSID, "DllRegisterServer"));
            Dispatch.call(compCLSID, "RTD", new Object[] { "PRICE" }); // "xrtd.xrtd", "", "PRICE", "514000", "ЕТР", "BID" });
        } catch (final Exception ex) {
            ex.printStackTrace();
        }

    }

}


на

Код

 Dispatch.call(compCLSID, "RTD", new Object[] { "PRICE" }); // "xrtd.xrtd", "", "PRICE", "514000", "ЕТР", "BID" });


вылетает

Код

com.jacob.com.ComFailException: Can't map name to dispid: RTD
    at com.jacob.com.Dispatch.invokev(Native Method)
    at com.jacob.com.Dispatch.invokev(Dispatch.java:625)
    at com.jacob.com.Dispatch.callN(Dispatch.java:453)
    at com.jacob.com.Dispatch.call(Dispatch.java:541)
    at solutions.javaee.stock.experiments.JACOBGettingStarted.doExecute(JACOBGettingStarted.java:50)
    at solutions.javaee.stock.experiments.JACOBGettingStarted.main(JACOBGettingStarted.java:13)


к сожалению Гугль показывает один и не решённый топик на эту тему:

Accessing RTD or DDE data from Online Trader

может кто-то, что-то подскажет? куда копнуть?

заранее большое спАсибо smile

Это сообщение отредактировал(а) polosatij - 27.7.2016, 09:55


--------------------
PM   Вверх
LSD
Дата 27.7.2016, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Возьми какой нибудь OLE-COM Object Viewer и посмотри XRTD.XRTD на предмет того какие у него есть функции, свойства и т.д.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
polosatij
Дата 27.7.2016, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 22.2.2004
Где: Stuttgart<-> ;Karlsruhe, Germany

Репутация: 1
Всего: 8



Цитата

Возьми какой нибудь OLE-COM Object Viewer и посмотри XRTD.XRTD на предмет того какие у него есть функции, свойства и т.д. 


да.. пасибА.. это ещё больше поставило меня в тупик.. вот скриншот:

user posted image

user posted image



Это сообщение отредактировал(а) polosatij - 27.7.2016, 14:44


--------------------
PM   Вверх
polosatij
Дата 28.7.2016, 01:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 22.2.2004
Где: Stuttgart<-> ;Karlsruhe, Germany

Репутация: 1
Всего: 8



может где-то можно просто найти RTD Client для Java? я что-то обыскался уже  smile 

PS: нашёл только сервер. клиент из сервера отказывается работать. https://sites.google.com/a/teamdev.com/comf...-site&q=RTD

Это сообщение отредактировал(а) polosatij - 28.7.2016, 01:04


--------------------
PM   Вверх
LSD
Дата 28.7.2016, 13:04 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Ты не туда смотришь. Тебе надо разобраться как это работает на уровне COM, а не на Java все валить.
Вот статья с описанием RealTimeData server https://support.microsoft.com/en-us/kb/285339

1. Тебе надо получить интерфейс IRTDServer
2. Вызвать у него ServerStart
3. Вызвать ConnectData
4. Вызвать RefreshData и получить данные.
5. Повторить пункт 4
6. DisconnectData
7. ServerTerminate
8. Dispose интрефейса и затем объекта.

Посмотри пример на VBA из статьи и повтори алгоритм на Java.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
polosatij
Дата 28.7.2016, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 22.2.2004
Где: Stuttgart<-> ;Karlsruhe, Germany

Репутация: 1
Всего: 8



Цитата(LSD @  28.7.2016,  12:04 Найти цитируемый пост)
1. Тебе надо получить интерфейс IRTDServer
2. Вызвать у него ServerStart
3. Вызвать ConnectData
4. Вызвать RefreshData и получить данные.
5. Повторить пункт 4
6. DisconnectData
7. ServerTerminate
8. Dispose интрефейса и затем объекта.


ночью налетел на это smile пасиба за помощь буду смотреть smile странно, что для ява нигде нет RDT клиента, очень странно...

Добавлено через 13 минут и 46 секунд
Code Generator


--------------------
PM   Вверх
LSD
Дата 28.7.2016, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



И еще пара моментов. Если не заработает попробуй взять тот пример на VBA и запустить его. Там можно подебажить, посмотреть что к чему.

И посмотри на документацию к самой библиотеке, там явно есть больше интерфейсов чем требуется для RealTimeData server. Возможно есть что-то более функциональное чем IRTDServer.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
polosatij
Дата 28.7.2016, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 22.2.2004
Где: Stuttgart<-> ;Karlsruhe, Germany

Репутация: 1
Всего: 8



сгенерировал стаб через comfyj. пытаюсь достучаться:

Код

final IRtdServerImpl rtdServer = new IRtdServerImpl(CLSID.createFromProgID("XRTD.XRTD"), ClsCtx.LOCAL_SERVER);


получаю:

Код

Exception in thread "main" com.jniwrapper.win32.com.ComException: COM object method returns error code: 0x80040154; REGDB_E_CLASSNOTREG (Klasse nicht registriert)
    at com.jniwrapper.win32.com.ComException.checkResult(SourceFile:172)
    at com.jniwrapper.win32.com.ComFunctions.coCreateInstance(SourceFile:165)
    at com.jniwrapper.win32.com.impl.IUnknownImpl.<init>(SourceFile:81)
    at com.jniwrapper.win32.automation.impl.IDispatchImpl.<init>(SourceFile:53)
    at htx3.xrtd.impl.IRtdServerImpl.<init>(IRtdServerImpl.java:41)
    at RTDClientSample.main(RTDClientSample.java:15)


не получается зарегистрировать через regsvr32.exe /i RTDServer.dll
ошибка: 0х80040201

у меня машина 64 бита, RTDServer - 32 бита. ява - 32 бита.
через Excel RTD команда великолепно вызывается и работает.  smile 


--------------------
PM   Вверх
polosatij
Дата 28.7.2016, 20:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 22.2.2004
Где: Stuttgart<-> ;Karlsruhe, Germany

Репутация: 1
Всего: 8





--------------------
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0910 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.