Форум программистов, компьютерный форум CyberForum.ru

Как двум приложениям совместно использовать DLL? - C++

Восстановить пароль Регистрация
 
micha12
0 / 0 / 0
Регистрация: 20.01.2009
Сообщений: 118
06.10.2009, 05:01     Как двум приложениям совместно использовать DLL? #1
Всем привет,

У меня есть некоторое приложение, которое, загрузившись, вызвало функцию внешнего .dll. В этом .dll есть public переменные. Известно, что каждая отдельная программа, которая подключает к себе .dll, работает со своей собственной копией всех public и static переменных этого .dll.

Мне же нужно, чтобы другая программа получила доступ к именно данной копии этого .dll. Более конкретно, я хочу, чтобы сначала запустилось одно приложение, подключило к себе .dll, поработало с ним, а потом передало другому приложению ссылку на именно этот .dll, чтобы второе приложение, в свою очередь, могло с ним работать.

Как это сделать?

Заранее спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.10.2009, 05:01     Как двум приложениям совместно использовать DLL?
Посмотрите здесь:

Литература по MDI приложениям C++
C++ Как сделать сложный проект(.ехе+.dll)? Как там они сводятся?
C++ Есть структура, компилятор считывает некоторые её поля ТОЛЬКО из адресов, кратным двум, а их там нет! (полей), как быть?
Как правильно вызвать метод в С++ и как использовать команду goto в default C++
Как сделать ,чтобы строки двумерного массива были кратные двум? C++
C++ Использовать код, написанный на С++ (DLL) в C#
C++ Как правильно использовать классы? Как вывести значение класса на экран?
C++ Как построить график в Visual Studio C++ по двум массивам?
Как использовать dll в проекте C++? C++
C++ Как создать и использовать DLL с ресурсами?
C++ Как вывести одно значение из массива list? Лучше использовать итератор или как-то по другому?
C++ ликбез по оконным приложениям

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OnLineOFF
0 / 0 / 0
Регистрация: 05.10.2009
Сообщений: 3
07.10.2009, 14:24     Как двум приложениям совместно использовать DLL? #2
Приветик!
Проблема понятна...
То что Вы там назвали ссылкой на dll_ есть 'дескриптор',
что полностью подчеркивает принадлежность конкретного dll_ модуля вашему адрессному пространству.

Выше упомянутая проблема может быть решена методом наследования таблици дескрипторов родительского процесса. Для этого новый процесс конечно должен быть дочерним по отношению к тому у котрого собирается наследовать таблицу.
Все это делается средствами API.

А теперь, как это все сделать не прибегая к выше упомянутому методу:
В dll_ надо создать 'секцию' доступную всем копиям dll_, такую себе shared память(одно и тоже значение во всех копиях), как это сделать:

Код
#pragma data_seg('Shared')
int global = 0; //Инициализация обязательна
#pragma data_seg()
#pragma comment (linker , '/Section:Shared, rws') //Чтение, запись
Так вот - меняем значение global в одной dll_ изменения отображаются сразу во все спроэкцированных копиях.

Удачи
micha12
0 / 0 / 0
Регистрация: 20.01.2009
Сообщений: 118
08.10.2009, 03:55  [ТС]     Как двум приложениям совместно использовать DLL? #3
Спасибо за ответ.

А как работает первый подход, с дескрипторами? Нет ли у Вас готового примера, либо ссылки на ресурс, где про это понятно написано?
micha12
0 / 0 / 0
Регистрация: 20.01.2009
Сообщений: 118
22.10.2009, 03:22  [ТС]     Как двум приложениям совместно использовать DLL? #4
Привет,

Я создал .dll, написал туда такой код, как ты мне написал, но у меня не сработало то, что нужно. Что делать? Можешь прислать пример?

Спасибо.
Yandex
Объявления
22.10.2009, 03:22     Как двум приложениям совместно использовать DLL?
Ответ Создать тему
Опции темы

Текущее время: 08:55. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru