Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Dimmak
4 / 4 / 0
Регистрация: 10.12.2012
Сообщений: 173
#1

Распространение данных между приложениями с использованием DLL - C++

25.05.2014, 06:14. Просмотров 346. Ответов 5
Метки нет (Все метки)

Возможно ли использовать dll как "ретранслятор" данных для приложений?
Те первым приложением вызывается функция "set", которая устанавливает переменную i+= 1, a второе приложение вызывает функцию "get", которая возвращает значение переменной i.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include "stdafx.h"
#include <windows.h>
#include <iostream>
using namespace std;
 
//Function declarations
extern "C" __declspec(dllexport) int __cdecl Set() ;
extern "C" __declspec(dllexport) int __cdecl Get() ;
 
BOOL APIENTRY DllMain( HANDLE hModule, DWORD  ul_reason_for_call, LPVOID lpReserved ){ return TRUE ; }
 
int i= 0 ;                      
__declspec(dllexport) int __cdecl Set()
{ i+= 1 ; return i ; }
 
__declspec(dllexport) int __cdecl Get()
{ int j= i ; if( i> 0){ i= 0 ;} return j ; }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.05.2014, 06:14
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Распространение данных между приложениями с использованием DLL (C++):

Передача данных между двумя приложениями. - C++
Суть проблемы такова: есть приложение на с#, производящее вычисления, результатом является массив данных. Есть прога на с++ + QT, умеющая...

Обмен между приложениями - C++
Есть два приложения в ОС Windows , одно консольное которое ждет ввода трех чисел std::cin , второе диалоговое , диалоговое запускает...

Сообщения между win32 приложениями - C++
Как отправить сообщение (аналог системных типа WM_DESTROY только свои) и обработать приемником? приёмник это обычное консольное win32...

Технология обмен данными между приложениями - C++
Приветствую профессионалов и любителей программирования! Принимайте новичка. Собственно такой вопрос, скорее системного характера....

Как обмениваться данными между приложениями в сети? - C++
Есть несколько приложений работающих в сети (TCP/IP) Необходимо организовать между ними обмен данными, как это лучше сделать? При помощи...

Обмен данными между двумя приложениями по системе клиент-сервер - C++
Всем доброго времени суток. Хочу сразу же уточнить, что готовый код меня не интересует. Нужны дельные советы или ссылки где можно почитать...

5
Вованя
137 / 134 / 48
Регистрация: 20.02.2014
Сообщений: 478
Завершенные тесты: 1
25.05.2014, 06:20 #2
Dimmak, если я не ошибаюсь, то каждый экземпляр библиотеки загружается в адресное пространство каждого приложения, то есть, так не получится, нужно использовать какое-то межпроцессное взаимодействие(каналы, сокеты, файлы и т.д)
0
Dimmak
4 / 4 / 0
Регистрация: 10.12.2012
Сообщений: 173
25.05.2014, 06:59  [ТС] #3
Цитата Сообщение от Вованя Посмотреть сообщение
каждый экземпляр библиотеки загружается в адресное пространство каждого приложения
Да, это так. А если с использованием pointer? Теоритически каждый длл, загруженный в адресное пространство каждого из приложений, будет использовать один и тот же адрес памяти.
0
Вованя
137 / 134 / 48
Регистрация: 20.02.2014
Сообщений: 478
Завершенные тесты: 1
25.05.2014, 07:16 #4
Цитата Сообщение от Dimmak Посмотреть сообщение
использовать один и тот же адрес памяти.
Ну и что, это ведь только виртуальный адрес, который транслируется потом в физический, а вот как раз таки физический адрес приложений не пересекаются с друг другом, то есть у разных приложений адрес переменной может быть одинаковый(точнее даже адреса начала сегментов одинаковый), но это не значит, что это один и тот же физический адрес. Тут только, как я говорил, либо каналы, либо сокеты, либо файлы, ну и чего может быть еще.
1
Убежденный
Ушел с форума
Эксперт С++
15933 / 7243 / 1140
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
Завершенные тесты: 1
25.05.2014, 13:29 #5
Цитата Сообщение от Dimmak Посмотреть сообщение
Теоритически каждый длл, загруженный в адресное пространство каждого из приложений, будет использовать один и тот же адрес памяти.
Не факт. dll могут быть загружены по разным адресам. Память выделяется
тоже по разным адресам. В общем, это условие будет срабатывать лишь изредка.
0
Dimmak
4 / 4 / 0
Регистрация: 10.12.2012
Сообщений: 173
26.05.2014, 04:11  [ТС] #6
Цитата Сообщение от Убежденный Посмотреть сообщение
dll могут быть загружены по разным адресам. Память выделяется
тоже по разным адресам. В общем, это условие будет срабатывать лишь изредка.
Ясно... Одним вопросом меньше.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.05.2014, 04:11
Привет! Вот еще темы с ответами:

Ошибки с использованием общих MFC dll - C++
Доброго времени суток! По выпускной работе приходится работать с RFID оборудованием, к которому в комплекте шло API и некоторые примеры....

Как происходит линковка между проектом и DLL? - C++
Всем привет. 100500-я &quot;уникальная&quot; тема &quot;как привязать DLL к проекту&quot;. форум я перерыл темы в ответах проработал Страуструпа - проработал. ...

Кто может поделиться файлами ogg.dll, vorbis.dll и vorbisfile.dll - 32-х и 64-битными версиями? - C++
Движок перевожу на платформу Win64 и нужно, чтобы разрядность ЕХЕ и DLL совпадали, а в интернете искал 64-битные версии ogg.dll, vorbis.dll...

Обмен данных между DOS-приложениями и Windows-приложениями - Windows XP
Как настроить установки Windows 98, чтобы нажатием клавиши PrtSc рисунок, созданный Borland Pascal-программой, скопировался в буфер обмена?...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru