Как поделиться переменными для нескольких программ?

0

Хорошо, название немного запутанно.

Что у меня есть: у меня есть программа M, которую я не могу изменить. У меня есть только возможность сделать некоторые скрипты и добавить доступ к общим объектам (DLL).

Теперь я хочу сделать некоторые сумасшедшие вещи с данными в M. Сценарий lnaguage недостаточен для моих нужд, и я не хочу делать все в DLL (мало опыта в C (++),...).

Моя мысль заключалась в создании DLL (позволяет называть его B для моста), который должен быть вставлен в некоторый код клея в M. Теперь пользовательское приложение A (в моем случае, написанное в java) должно подключиться к B. Теперь взаимодействие должно быть возможно подключить M с A throug B.

Я просто попытался связать эти вещи в примерной системе под Linux. Здесь я сталкиваюсь с проблемой, что библиотека не передает необходимую информацию.

Я имею для тестирования два java-экземпляра, называемых J1 и J2. J1 зарегистрировал функцию обратного вызова в SO. Выполнение обратного вызова из J1 (J1 → SO → J1) работает. Попытка запуска через J2 не работает: кажется, J1 не зарегистрирован. Вместо этого J2 получает registeresd. (см. источники)

Посмотрев в сети, я обнаружил:

  • Нельзя делиться памятью с другими процессами.
  • Поведение зависит от платформы.

Код проверки библиотеки: http://pastebin.com/bFUbwE68
Код Java: http://pastebin.com/zpecisVN

Что бы вы сделали, чтобы получить данные от M до A и некоторые данные от A до M (частые опросы от M в порядке)?

Изменение: Долгосрочная цель - запустить M + B на виртуализированной машине win, а A - через сеть.

Лучше ли разрабатывать DLL-часть непосредственно под Win, а не под Linux и позже портировать?

Теги:
shared-libraries

3 ответа

2

Вы можете использовать систему обмена сообщениями, такую как IBM MQ Series, для публикации и получения сообщений между двумя приложениями. JAVA JMS (Java Messaging System) упростит подключение к поставщику сообщений.

  • 0
    Как получить доступ к Java JMS через C (++)?!? Я думал, что это была чистая Ява. Или вы имеете в виду использовать JMS только через сеть? Тогда вопрос об общении между Java и M все еще остается открытым.
  • 0
    Вам не нужно обращаться к JMS через C ++, вам просто нужно получить доступ к системе обмена сообщениями (например, MQ Series) через оболочку C ++. Каждый поставщик сообщений будет иметь интерфейс C ++ к своей системе и библиотеку JMS для использования в Java.
1

Я, вероятно, начну с Java Native Access, если это не сработает, я могу посмотреть на JNI. Если бы это не сработало, я бы, вероятно, попробовал Apache Thrift. Если он все еще не работает, я бы, вероятно, попробовал omniORB или вообще любой другой C++ ORB. К сожалению, вы не можете использовать Windows DLL непосредственно в Linux, как это (Windows DLL не являются перекрестной платформой). Если вы необычайно талантливы и терпеливы, вы можете заставить его работать под эмуляцией Wine. В противном случае вам понадобится использовать механизм RPC, такой как Thrift или CORBA, или вы можете написать свой собственный проводной протокол (это может показаться хорошей идеей, но, вероятно, это не так), для подключения между вашей машиной Windows и Linux.

  • 0
    Смотрите редактирование; Основная проблема состоит в том, чтобы обмениваться данными между двумя приложениями независимо от платформы.
  • 1
    @ChristianWolf См редактировать. Linux изначально не поддерживает Windows DLL. Вы пытаетесь использовать Windows DLL под Linux? По своей природе файлы Windows DLL зависят от платформы.
Показать ещё 5 комментариев
-2

для java вы можете использовать простой класс переменных, который инициализирует все переменные и создает концепцию одноэлементного объекта, вы можете сделать глобальные переменные доступными для других файлов в конкретном проекте

  • 2
    Как именно это отвечает на вопрос?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню