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

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

Войти
Регистрация
Восстановить пароль
 
DmitryE
0 / 0 / 0
Регистрация: 29.03.2014
Сообщений: 8
#1

Подскажите как хранить перемененные в DLL - C++

30.03.2014, 02:04. Просмотров 519. Ответов 9
Метки нет (Все метки)

Здравствуйте.

Я пишу dll функционал которой в приеме данных из одной программы (в которой будет вызвана соответствующая функция по передаче данных в dll) и передача в другую программу при вызове функции из этой другой программы.

Данные в dll необходимо как-то хранить между приемом и передачей и знать наименование хранимой переменной в dll для запроса в функции именно этой переменной, может ли быть таких хранимых переменнных 10 шт (?), прошу подсказать способ ?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MastAKK
145 / 136 / 12
Регистрация: 13.10.2012
Сообщений: 586
Записей в блоге: 1
30.03.2014, 02:19     Подскажите как хранить перемененные в DLL #2
Может я что-то не знаю, но... Почему должно быть нельзя?

Добавлено через 43 секунды
Создаете в .h файле переменную и записываете туда. В чём проблема?
Melg
538 / 159 / 64
Регистрация: 23.09.2013
Сообщений: 314
30.03.2014, 02:35     Подскажите как хранить перемененные в DLL #3
Здравствуйте, если Вы планируете сначала запустить программу А, которая динамически линкуется с Вашей dll, и вызовет некоторые методы у неё - установив значения переменных - а потом другая программа Б, так-же динамически линкуясь с Вашей dll вызовет у неё другие методы - пытаясь получить значения переменных - то без дополнительных "внешних" хранилищ такая реализация не осуществима. Хотя-бы по тому, что у двух разных запущенных программ разное адресное пространство - и dll в данном случае просто экспортирует свой функционал в Ваше приложение, но инициализироваться данные будут для каждой программы по-отдельности.
Или же я не совсем верно понял Ваш вопрос?
DrOffset
7060 / 4201 / 949
Регистрация: 30.01.2014
Сообщений: 6,968
30.03.2014, 02:41     Подскажите как хранить перемененные в DLL #4
Цитата Сообщение от MastAKK Посмотреть сообщение
Создаете в .h файле переменную и записываете туда.
Если этот файл подключается в dll и в клиентское приложение, то будет две переменных, одна в dll в месте подключения, другая в приложении - в месте подключения. Поэтому переменные из dll нужно экспортировать. То есть определяется она где-то в cpp dll, а в h-файле определяется ее экспорт или импорт в зависимости от того кто его подключает (приложение или dll). Либо можно сделать функцию для доступа к этой переменной, но функцию тоже нужно экспортировать.

Добавлено через 5 минут
А Melg абсолютно прав в своей оценке. "Расшаривать" переменные через dll между разными процессами не получится без дополнительных "внешних" хранилищ.
MastAKK
145 / 136 / 12
Регистрация: 13.10.2012
Сообщений: 586
Записей в блоге: 1
30.03.2014, 02:41     Подскажите как хранить перемененные в DLL #5
DrOffset, не знал. Надо получить теорию, с библиотеками пока что ни разу не возился
DmitryE
0 / 0 / 0
Регистрация: 29.03.2014
Сообщений: 8
30.03.2014, 02:48  [ТС]     Подскажите как хранить перемененные в DLL #6
Я еще не очень хорошо программирую, попробую описать суть.

Одна программа вызывает функцию DLL с указанием наименования переменнойсоздаваемой в dll для хранения и грузит данные в эту переменную.

Вторая программа вызывет функцию dll с указанием наименования переменной которую нужно загрузить из памяти, что-бы забрать из нее данные.

Все верно ?

p.s. Я читаю в интернете на тему хранения и передачи данных в dll и тут вот такие методы предлагают (Называется вроде как SharedMemory):

C++
1
2
3
4
5
6
7
8
9
  #pragma data_seg (“.MySeg”)
 
        int sharedInts[5]={0,0,0,0,0}; // переменная общего пользования
        // другие переменные общего пользования
 
        . . .
        #pragma data_seg ()
 
        #pragma comment (lib, ”msvcrt” “-SECTION: .MySeg, rws”);
И еще вопрос, как создавать в коде dll дополнительные переменные с названием взятым из параметров в вызываемой функции dll ? Что-бы потом к ним можно было обращаться при вызове другой функции DLL.
DrOffset
7060 / 4201 / 949
Регистрация: 30.01.2014
Сообщений: 6,968
30.03.2014, 02:58     Подскажите как хранить перемененные в DLL #7
Цитата Сообщение от DmitryE Посмотреть сообщение
Я читаю в интернете на тему хранения и передачи данных в dll и тут вот такие методы предлагают
То, что описано в этом методе и есть те самые дополнительные ухищрения Мы тут создаем сегмент свой и помечаем его как shared (в rws - s - значит shared, r - read, w - write). То есть это один из вариантов shared memory. Короче, работать будет.

Добавлено через 5 минут
Цитата Сообщение от DmitryE Посмотреть сообщение
И еще вопрос, как создавать в коде dll дополнительные переменные с названием взятым из параметров в вызываемой функции dll ? Что-бы потом к ним можно было обращаться при вызове другой функции DLL.
Придумать какой-то свой способ адресации. Например, если передаются строки, которые содержат имена, то где-то в dll может быть контейнер, который свяжет эти строки с адресами реальных переменных - только что созданных или уже существующих. Ассоциативные массивы тебе помогут в этом. Реализаций много, в std есть, например, map.
Melg
538 / 159 / 64
Регистрация: 23.09.2013
Сообщений: 314
30.03.2014, 02:59     Подскажите как хранить перемененные в DLL #8
Кажется я нашел эту статью http://www.ishodniki.ru/art/art_progr/builder/224.html
Это специализированная для win32 техника, подробнее описана тут:
http://msdn.microsoft.com/ru-ru/libr...(v=vs.90).aspx
Всё, что Вы напишите в коде будет "высечено топором" на этапе компиляции - и в рантайме меняться не будет (так в частности и имена переменных). Для того чтобы можно было из параметров функций взять "название переменной" вам потребуется хранить некоторый контейнер - содержащий в себе строку названия в качестве ключа и значения переменной в в качестве данных.
DmitryE
0 / 0 / 0
Регистрация: 29.03.2014
Сообщений: 8
30.03.2014, 03:30  [ТС]     Подскажите как хранить перемененные в DLL #9
Позвольте еще один вопрос.

Можно будет ли работать такая конструкция в теле функции, т.е.:

C++
1
2
3
4
5
6
7
8
9
DLLAPI int __stdcall TransferVariableToDll(double &VariableM, int &varialbeleght, char &Varialblename)
{
 
#pragma data_seg (“.Variablesegm”)
 
int Variablename[varialbeleght]={VariableM};
 
#pragma data_seg () 
}
Можно ли будет эту переменную теперь получить из памяти вызовом следующей функции:
C++
1
2
3
4
5
DLLAPI int __stdcall TransferVariableFromDLL(char &NameOfVariableToExport, double &ExportVariableData)
{
 
ExportVariableData =  NameOfVariableToExport
}
Добавлено через 15 минут
Спасибо всем за ответы !!!

Правильно ли я понял, что создавать динамически расшаренные переменные в коде dll будет нельзя ?

т.е. таким кодом:

C++
1
2
3
4
5
6
7
8
9
DLLAPI int __stdcall TransferVariableToDll(double &VariableM, int &varialbeleght, char &Varialblename)
{
 
#pragma data_seg (“.Variablesegm”)
 
int Variablename[varialbeleght]={VariableM};
 
#pragma data_seg () 
}
Добавлено через 1 минуту
Это специализированная для win32 техника
Будет ли эта техника работать в Windows x64 ?

Добавлено через 6 минут
Придумать какой-то свой способ адресации. Например, если передаются строки, которые содержат имена, то где-то в dll может быть контейнер, который свяжет эти строки с адресами реальных переменных - только что созданных или уже существующих. Ассоциативные массивы тебе помогут в этом. Реализаций много, в std есть, например, map.
Вопрос - создать реальную переменную в коде dll возможно ? Ведь для шаредмемори я как понял нужно знать еще длинну переменной и ее тип и на момент компиляции ее выяснить нельзя.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.03.2014, 12:25     Подскажите как хранить перемененные в DLL
Еще ссылки по теме:
C++ Как хранить и обрабатывать массив больших элементов
C++ Как компактно отображать и хранить большие числа?
C++ Как хранить объекты разных классов в одном контейнере
Задача на алгоритм Дейкстры (как лучше хранить информацию?) C++
Как в int* var хранить массивы? В чем суть задания? C++

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

Или воспользуйтесь поиском по форуму:
KOPOJI
30.03.2014, 12:25     Подскажите как хранить перемененные в DLL
  #10
 Комментарий модератора 
Кросспостинг http://www.cyberforum.ru/order-progr...ad1133392.html.
Закрыто.
Yandex
Объявления
30.03.2014, 12:25     Подскажите как хранить перемененные в DLL
Закрытая тема Создать тему
Опции темы

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