![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Temdegon |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 429 Регистрация: 11.10.2008 Где: Minsk Репутация: нет Всего: 9 |
Есть windows-приложение, с которым мне нужно общаться из джава. Каких-то встроенных возможностей для коммуникации в нем не предусмотрено, но есть возможность загуржать пользовательскую dll, чем я и воспользовался. Написал свою dll на c++ и из нее коннекчусь к своему java-серверу. В сях я нуб, по этому сильно не заморачивался, нашел готовую реализацию сокета
http://www.adp-gmbh.ch/win/misc/sockets.html и вроде пока все получается. Строки передаются и принимаются без проблем. Но одними строками сыт не будешь. Мне надо из этой dll в джава передать вот такую структуру:
Как это правильнее (и просто, если это применимо к си Еще меня настораживает один момент. Как-то странно выглядит функция для отправки байтов:
Как мне отправлять такие данные в в этот метод, и как их потом использовать в джава? |
||||
|
|||||
| EgorTheBlade |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 141 Регистрация: 5.12.2009 Репутация: нет Всего: -1 |
Никогда до етого такую функцию не видел в С++ для отправки байт.
Переконвертируте ваши данные в байты в ручную или исп http://stackoverflow.com/questions/105252/...ian-values-in-c. |
|||
|
||||
| COVD |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 11 Всего: 43 |
Это и есть одна из причин появления на свет Java.
Читайте по-байтно и укладывайте в ByteBuffer. А потом извлекайте из ByteBuffer примитивные java-аналоги методами типа getDouble(), get() (для byte).... Для правильной интерпретации целочисленных типов int, long возможно надо установить в ByteBuffer порядок байтов ByteOrder.LITTLE_ENDIAN. |
||||
|
|||||
| Temdegon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 429 Регистрация: 11.10.2008 Где: Minsk Репутация: нет Всего: 9 |
Спасибо. Подозревал, что так и придется делать, но решил спросить на всякий случай. Думал, может через json передавать данные. Но я так понял, там возни будет не меньше.
|
|||
|
||||
| kosmonaFFFt |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 538 Регистрация: 14.4.2008 Где: Иннополис Репутация: нет Всего: 5 |
Можно через XML, на Java оно очень просто парсится...
-------------------- ![]() |
|||
|
||||
| casey |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 20.12.2006 Где: Украина Репутация: нет Всего: 2 |
Функция будет некорректно работать в случае нахождения в последовательности байт к отправке байта 0х00 - проверил на VC++ 2008. Да тут и так ясно что так не следует делать - нужно переписать типа так:
|
||||
|
|||||
| Amp |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 886 Регистрация: 17.2.2009 Репутация: нет Всего: 17 |
||||
|
||||
| casey |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 20.12.2006 Где: Украина Репутация: нет Всего: 2 |
Так устроит? Результат соответственно:
Это сообщение отредактировал(а) casey - 1.11.2010, 12:26 |
||||
|
|||||
| Amp |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 886 Регистрация: 17.2.2009 Репутация: нет Всего: 17 |
А причем здесь обсуждаемая функция?
Либо так
Добавлено через 2 минуты и 50 секунд Конечно в описываемом случае работа со строкой является некрасивым решением. |
||||
|
|||||
| casey |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 20.12.2006 Где: Украина Репутация: нет Всего: 2 |
Согласен, не знал что так можно обойти
Так по идее нельзя, потому как const char* c_str() Вобщем-то это костыль, который не обязан везде работать |
||||
|
|||||
| Amp |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 886 Регистрация: 17.2.2009 Репутация: нет Всего: 17 |
||||
|
||||
| Temdegon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 429 Регистрация: 11.10.2008 Где: Minsk Репутация: нет Всего: 9 |
Я поступил самым примитивным способом - сбросил все данные в строку через разделитель.
Всем спасибо |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Работа с сетью | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |