Взаимодействие двух приложений на Qt через dll. |
Здравствуйте, гость ( Вход | Регистрация )
Взаимодействие двух приложений на Qt через dll. |
Duker |
12.6.2011, 19:38
Сообщение
#1
|
Новичок Группа: Новичок Сообщений: 2 Регистрация: 12.6.2011 Пользователь №: 2739 Спасибо сказали: 0 раз(а) Репутация: 0 |
Всем привет.
Столкнулся вот с такой проблемой. Есть два Qt приложения KAUS и Arinc (2 exe файла) и dll файл тоже написаный на Qt (использую Qt Creator). Все лежит в одной директории. Суть такова использовать dll для обмена данными между приложениями. Т.е. одно приложение только записывает в переменные данные, а другое только считывает. Вообщем dll'ка работает исправно, когда её использует только одно приложение. Т.е. использую в одном приложении функцию SetStructValuesNAV для записи данных, а затем GetStructValuesNAV для чтения. Это работает. А если использую двумя приложениями то при чтении данных выдаются нули... Нашел информацию в интернете что при таком использовании dll каждое приложение имеет свой экземпляр объета dll и в этом случае надо использовать dll share. Вот пример кода что на данный момент есть. Файлы dll'ки Файл: Module_Navigation.pro
Файл: mysharedlib_global.h
Файл: module_navigation.h
Файл: module_navigation.cpp
Пример записи данных в dll из приложения Arinc
Пример чтения данных из dll из приложения KAUS выводятся нули...Вроде все указал...
Причина редактирования: используй кнопку КОД
|
|
|
kuzulis |
12.6.2011, 19:46
Сообщение
#2
|
Активный участник Группа: Участник Сообщений: 393 Регистрация: 29.6.2009 Пользователь №: 862 Спасибо сказали: 36 раз(а) Репутация: 7 |
Ох,
Ничего у вас не получится, почитайте для чего нужны длл-ки! В вашем случае используйте, к примеру, QLocalServer/QLocalSocket... Аналогичная тема была тут: http://www.prog.org.ru/topic_17997_0.html |
|
|
DIMEDROLL |
12.6.2011, 23:07
Сообщение
#3
|
Участник Группа: Участник Сообщений: 165 Регистрация: 28.9.2008 Из: Киев Пользователь №: 304 Спасибо сказали: 23 раз(а) Репутация: 0 |
Duker, dll существуют совсем не для этих целей.
То что вам нужно называется Inter Process Communication (IPC) - межпроцессное взаимодействие и гуглить надо по этому термину. Самый простой вариант IPC это использование файлов, одна программа пишет в файл, другая читает. То же, но с использованием ОЗУ вместо жесткого диска называется Shared Memory, еще есть сетевое взаимодействие через сокеты (как указано выше), а так же Pipes и т.п.... msdn |
|
|
Litkevich Yuriy |
13.6.2011, 7:32
Сообщение
#4
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
Duker |
13.6.2011, 19:54
Сообщение
#5
|
Новичок Группа: Новичок Сообщений: 2 Регистрация: 12.6.2011 Пользователь №: 2739 Спасибо сказали: 0 раз(а) Репутация: 0 |
Вообщем получись сделать задуманное при помощи share переменной.
Если компилятор VC то юзать надо #pragma data_seg как написано здесь ссылка Если компилятор GCC... Вот что нарыл из документации по GCC shared On Microsoft Windows, in addition to putting variable definitions in a named section, the section can also be shared among all running copies of an executable or DLL. For example, this small program defines shared data by putting it in a named section shared and marking the section shareable:
You may only use the shared attribute along with section attribute with a fully initialized global definition because of the way linkers work. See section attribute for more information. The shared attribute is only available on Microsoft Windows. Но такие возможности я так понял есть только в Windows. |
|
|
Текстовая версия | Сейчас: 30.11.2024, 7:32 |