Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 29.03.2014
Сообщений: 8

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

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

Студворк — интернет-сервис помощи студентам
Здравствуйте.

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

Данные в dll необходимо как-то хранить между приемом и передачей и знать наименование хранимой переменной в dll для запроса в функции именно этой переменной, может ли быть таких хранимых переменнных 10 шт (?), прошу подсказать способ ?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.03.2014, 02:04
Ответы с готовыми решениями:

как хранить данные в dll
подскажите, возможно ли, и как хранить данные в dll? например не хочу чтоб логин пароль и некоторая другая информация была в текстовом...

Как в C# хранить ресурсы в dll?
И еще у меня вопрос, как в C#. Можно хранить ресурсы в dll?

где хранить текст файлы? или как хранить данные?
Есть прога простенкая: берет инфу из текстфайла, редактирует и записывает обратно в тхт файл. Нужно сделать так чтобы инфу не смогли читать...

9
 Аватар для MastAKK
148 / 139 / 18
Регистрация: 13.10.2012
Сообщений: 592
30.03.2014, 02:19
Может я что-то не знаю, но... Почему должно быть нельзя?

Добавлено через 43 секунды
Создаете в .h файле переменную и записываете туда. В чём проблема?
0
542 / 163 / 79
Регистрация: 23.09.2013
Сообщений: 316
30.03.2014, 02:35
Здравствуйте, если Вы планируете сначала запустить программу А, которая динамически линкуется с Вашей dll, и вызовет некоторые методы у неё - установив значения переменных - а потом другая программа Б, так-же динамически линкуясь с Вашей dll вызовет у неё другие методы - пытаясь получить значения переменных - то без дополнительных "внешних" хранилищ такая реализация не осуществима. Хотя-бы по тому, что у двух разных запущенных программ разное адресное пространство - и dll в данном случае просто экспортирует свой функционал в Ваше приложение, но инициализироваться данные будут для каждой программы по-отдельности.
Или же я не совсем верно понял Ваш вопрос?
1
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
30.03.2014, 02:41
Цитата Сообщение от MastAKK Посмотреть сообщение
Создаете в .h файле переменную и записываете туда.
Если этот файл подключается в dll и в клиентское приложение, то будет две переменных, одна в dll в месте подключения, другая в приложении - в месте подключения. Поэтому переменные из dll нужно экспортировать. То есть определяется она где-то в cpp dll, а в h-файле определяется ее экспорт или импорт в зависимости от того кто его подключает (приложение или dll). Либо можно сделать функцию для доступа к этой переменной, но функцию тоже нужно экспортировать.

Добавлено через 5 минут
А Melg абсолютно прав в своей оценке. "Расшаривать" переменные через dll между разными процессами не получится без дополнительных "внешних" хранилищ.
2
 Аватар для MastAKK
148 / 139 / 18
Регистрация: 13.10.2012
Сообщений: 592
30.03.2014, 02:41
DrOffset, не знал. Надо получить теорию, с библиотеками пока что ни разу не возился
0
0 / 0 / 0
Регистрация: 29.03.2014
Сообщений: 8
30.03.2014, 02:48  [ТС]
Я еще не очень хорошо программирую, попробую описать суть.

Одна программа вызывает функцию 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.
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
30.03.2014, 02:58
Цитата Сообщение от DmitryE Посмотреть сообщение
Я читаю в интернете на тему хранения и передачи данных в dll и тут вот такие методы предлагают
То, что описано в этом методе и есть те самые дополнительные ухищрения Мы тут создаем сегмент свой и помечаем его как shared (в rws - s - значит shared, r - read, w - write). То есть это один из вариантов shared memory. Короче, работать будет.

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

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

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 возможно ? Ведь для шаредмемори я как понял нужно знать еще длинну переменной и ее тип и на момент компиляции ее выяснить нельзя.
0
30.03.2014, 12:25
 Комментарий модератора 
Кросспостинг https://www.cyberforum.ru/orde... 33392.html.
Закрыто.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.03.2014, 12:25
Помогаю со студенческими работами здесь

подскажите как dll переделать в so
исходники есть на с, но не факт что там api и прочее не юзается... может опыт есть перевода подобных программ? нужно самописные dll для...

Подскажите плз как компилировать dll
Здравствуйте. Возник вопрос на который в инете не нашёл "нормального" ответа... Захотел я в "чужой" dll кое что изменить: ...

Народ подскажите, чета я забыл DLL как экспортировать
Вот например есть в DLL код функции: void OpenAbout(HINSTANCE hInst, int cmdMode, HWND hWnds) { .... return; }

Подскажите как вынести пару процедур в DLL (игра Сапер)
Игра сапер Нужно перенести в DLL модуль операции по двум процедурам TForm1.N1Click и TForm1.ImageMouseDown Подскажите как? :) ...

Подскажите, как вызвать в основном файле функцию из .dll, используя функции WinAPI
Привет всем. Подскажите, пожалуйста, как вызвать функцию, определение которой находится в подключаемой .dll библиотеке с помощью функций...


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

Или воспользуйтесь поиском по форуму:
10
Закрытая тема Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru