Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/37: Рейтинг темы: голосов - 37, средняя оценка - 4.54
37 / 37 / 5
Регистрация: 12.02.2010
Сообщений: 239

Сохранение переменной

03.08.2010, 20:41. Показов 6903. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!!! Подскажите пожалуйста, как сохранить переменную типа float в dll файл и как потом ее оттуда прочитать???
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.08.2010, 20:41
Ответы с готовыми решениями:

Сохранение значения переменной
Люди скажите это вообще реально чтобы в программе переменную (int p=1) перезаписать на 2 и чтоб после перезапуска программы эта двойка...

Сохранение номера дня в переменной int
Я уже перелопатил кучу исходников, и всюду номер текущего дня выводится, как переменная AnsiString, Можно ли присвоить номер дня в...

Сохранение положения компонента на форме (Сохранение параметра в Ini-файл)
Не знаю верно ли назвал тему. Доброго вечера тебе, всяк сюда входящий. Подскажите пожалуйста с вопросом: Имеется Form1, на нем...

12
Эксперт С++
 Аватар для MikeSoft
3957 / 1812 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
03.08.2010, 20:57
А кто вам сказал, что в DLL можно хранить пользовательские переменные?
Теоретически это можно сделать, но на практике, я уверен, что будет много сложностей.
Чем вас не устраивают ini-файлы (которые можно в последствии зашифровать и переименовать) или реестр Windows?
0
Покинул форум
3189 / 1368 / 109
Регистрация: 29.01.2010
Сообщений: 2,887
03.08.2010, 22:32
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от MikeSoft Посмотреть сообщение
Чем вас не устраивают ini-файлы (которые можно в последствии зашифровать и переименовать
Есть и простые текстовые файлы
Сохранять в такие можно так:
C++
1
2
3
4
5
float f=22564.215;
TStringList *l=new TStringList;
l->Add("F="+FloatToStr(f));
l->SaveToFile();
delete l;
.

В Ini-файлах, переменную типа float, можно хранить таким образом:
C++
1
2
3
4
float q=123.114;  //Наша переменная
TIniFile *f=new TIniFile("E:\\test.ini");  //Создаем INI-файл или есть такой файл существует - открываем его
f->WriteFloat("Data","MyValue",q);  //Записываем переменную
delete f; //Освобождаем память
А так прочитать:
C++
1
2
3
4
5
  float q;
TIniFile *f=new TIniFile("E:\\test.ini");  //Открываем наш Ini-файл
q=f->ReadFloat("Data","MyValue",0); //Читаем переменную и заносим ее в q. Если такой параметр не будет найден, то возвращаем 0
ShowMessage(q);  //Показываем значение нашей переменной
delete f; //Угадайте что... :)
2
37 / 37 / 5
Регистрация: 12.02.2010
Сообщений: 239
04.08.2010, 17:55  [ТС]
Цитата Сообщение от MikeSoft Посмотреть сообщение
Чем вас не устраивают ini-файлы (которые можно в последствии зашифровать и переименовать) или реестр Windows?
Я сейчас и пользуюсь ini-файлами!!! Просто я имел ввиду, что в ini-файлах можно легко прочитать переменную, а мне нужно ее куда нибудь скрыть, что б ее невозможно было прочитать???
0
Покинул форум
3189 / 1368 / 109
Регистрация: 29.01.2010
Сообщений: 2,887
04.08.2010, 18:16
Игорь98, кодируйте эту переменную или весь ini-файл целиком, архивируйте - способов множество, но вот хранить в dll-файле не самый, на мой взгляд, удачный из них.
0
Эксперт С++
 Аватар для MikeSoft
3957 / 1812 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
04.08.2010, 19:10
Игорь98, в таком случае, нужно прибегнуть к небольшой хитрости.
Вам необходимо сгенерировать псевдослучайное значеним GUID (Глобально-уникальный идентификатор).
GUID можно сгенерировать однократным нажатие Ctrl+Shift+G.
Затем необходимо создать раздел в реестре и записать туда то, что вам нужно.

Для наглядности написал вам небольшой примерчик:
C++
1
2
3
4
5
6
7
8
9
10
11
float Value = 3.14;
String guid = "{8C44A67F-C42E-473C-A312-888481FFA6DB}";
TRegistry *reg = new TRegistry(KEY_ALL_ACCESS);
if (reg) {
  reg->RootKey = HKEY_LOCAL_MACHINE;
  reg->OpenKey("Software\\CLASSES\\CLSID\\" + guid + "\\ProgID",true);
  reg->WriteFloat("",Value);
  reg->CloseKey();
}
delete reg;
reg = NULL;
В этом случае вашу переменную будет сложно найти, т.к. только вы (то есть, только разработчик) будет знать GUID.
Обнаружить такую переменную можно только перехватом всех действий процесса по отношению к реестру.

Однако и здесь никто не запрещает вам зашифровать вашу переменную и записать её как строку.
0
Покинул форум
3189 / 1368 / 109
Регистрация: 29.01.2010
Сообщений: 2,887
04.08.2010, 20:34
MikeSoft, но засорять реестр... Как-то не очень хорошо, хотя, должен признать, такой способ действенен.
Правда, при желании и такой путь легко найти и определить какой параметр за что отвечает, поэтому если так записывать, то само значение придется кодировать тоже.
0
Эксперт С++
 Аватар для MikeSoft
3957 / 1812 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
04.08.2010, 21:03
Цитата Сообщение от Nitan Посмотреть сообщение
MikeSoft, но засорять реестр... Как-то не очень хорошо
Почему? Он ведь создан именно для хранения данных.
Сам реестр, по сути, - древовидная иерархическая база данных, хранящая сведения об АО, ПО и настройках и модулях самой системы.

Тут есть маленький ньюанс: не стоит бояться пользоваться БД Реестра, нужно просто не забывать его очищать.
Я веду к тому, что когда разрабатывается более-менее стоящий программный продукт, то инсталлятор должен предусмотреть создание(и возможность чтения/записи) необходимых ключей, а деинсталлятор - обязательную очистку и удаление созданных ключей.
Иначе, смысла в реестре нет вообще.
А ведь операции чтения/записи в реестр будут выполняться несколько быстрее и данные будут скрыты от пользователя.

Цитата Сообщение от Nitan Посмотреть сообщение
Правда, при желании и такой путь легко найти и определить какой параметр за что отвечает, поэтому если так записывать, то само значение придется кодировать тоже.
При желании - даже кодирование не спасёт:
  • Делаем слепок реестра.
  • Вводим в нужную область программы необходимое число.
  • Закрываем программу и делаем второй слепок.
  • В изменившихся данных находим ту последовательность, в которую превратилось заданное число.

И в дальнейшем применяем различные методы дешифровки, до получения необходимого результата.
Правда, на этот вариант необходимо время.

В таких делах есть одно золотое правило:
Усилия по изобретению и кодированию хитроумных замков для хранения вашей драгоценной программы не должны превышать усилия воображаемого хакера, коварно затевающего её взлом. (с)

Это правило отлично сочетается с другим правилом:
Пока есть информация, которую нужно держать в секрете, всегда будет найден способ, который способен сделать данные публичными.
2
Покинул форум
3189 / 1368 / 109
Регистрация: 29.01.2010
Сообщений: 2,887
04.08.2010, 22:05
MikeSoft, как я понял, здесь ты говоришь о более или менее серьезных продуктах. Но если программа вообще не устанавливается на машину? И в таких случаях хранить в реестре бессмысленно.
Но это я так немного от темы отошел - просто предположил один из вариантов.
И мы, если честно, немного начали оффтопить, друг мой.

Добавлено через 6 минут

Не по теме:

Цитата Сообщение от MikeSoft Посмотреть сообщение
При желании - даже кодирование не спасёт:
  • Делаем слепок реестра.
  • Вводим в нужную область программы необходимое число.
  • Закрываем программу и делаем второй слепок.
  • В изменившихся данных находим ту последовательность, в которую превратилось заданное число.
И совсем не хорошо раскрывать тайны взлома юным хакерам.:D

0
Эксперт С++
 Аватар для MikeSoft
3957 / 1812 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
04.08.2010, 22:09
Nitan, почему же оффтоп? Всё отлично. Мы обсуждаем эффективность и удобства того или иного метода сохранения переменных. А значит, от темы не отходим. Должен же разработчик уметь выбрать для себя тот или иной метод... а наши обсуждения как раз и показывают плюсы или минусы для конкретного подхода. Так что, всё отлично

Цитата Сообщение от Nitan Посмотреть сообщение
о если программа вообще не устанавливается на машину?
Тогда в поставку несложно включить файл, который выполнит удаление созданных ветвей и удалит саму программу. По-моему, и конечному пользователю так удобнее будет.

Не по теме:

Цитата Сообщение от Nitan Посмотреть сообщение
И совсем не хорошо раскрывать тайны взлома юным хакерам.:D
Но надо же знать, чего ожидать от взломщика:D

0
Покинул форум
3189 / 1368 / 109
Регистрация: 29.01.2010
Сообщений: 2,887
04.08.2010, 22:22
Цитата Сообщение от MikeSoft Посмотреть сообщение
Тогда в поставку несложно включить файл, который выполнит удаление созданных ветвей и удалит саму программу. По-моему, и конечному пользователю так удобнее будет.
Я к чему клоню: программа не устанавливается на компьютер, имеет только exe-файл (сама программа) и еще что-то в придачу. И вот она при сохранении каких-то секретных данных начинает следить в рееестре, при этом пользователь этого не знает (он даже и не задумывается куда она все это сохраняет) и тогда, когда продукт больше юзеру не потребуется - он ее просто удалит (выделит папочку с программой и нажмет клавишу Delete).
Но в таком случае запись в реестре останется. Да, ничего страшного от 2 - 3 лишних строк нет и возможно при первой же чистке реестра они будут удалены, но все равно засоронение может произойти.

Не по теме:

Хотя на моей памяти была одна программка:
Ее нужно было "ломануть".:-[ Ну я начал думать как это сделать (программа сохраняла пароль в секретное место). Потом прошелся по exe-файлу, нашел имя одного файлика, затем нашел этот файлик, который, кстати, назывался "password.ini",:rofl: открыл его и увидел... нужный мне пароль. Даже не зашифрованный, а просто вот так на блюдечке.:D

1
Эксперт С++
 Аватар для MikeSoft
3957 / 1812 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
05.08.2010, 00:59
Я выше описывал возможный подход...
Поставляешь ты какую-то программу. На первый запуск вешаешь показ сообщения:
Для полного удаления программы запустите Delete.exe
А в Delete.exe разумеется удаляешь те две-три строчки из реестра.
Ничего плохого не станется

В общем, проблему ТС мы более, чем решили
1
37 / 37 / 5
Регистрация: 12.02.2010
Сообщений: 239
06.08.2010, 10:55  [ТС]
Спасибо, кое что для себя узнал нового!!!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.08.2010, 10:55
Помогаю со студенческими работами здесь

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

Сохранение переменной
Получаю переменную методом POST через <input> Можно ли какимто образом ее сохранить? Ну чтобы после перезагрузки страници ее можно было...

Сохранение переменной
Скажите, пожалуйста, как можно сохранить переменную, а после перезапуска приложения данную переменную можно было бы использовать снова в...

Сохранение переменной
Доброго времени суток! Возникла проблема с сохранением переменной. Есть файл Index.php, с него ajax'ом методом POST отправляется на файл...

Сохранение переменной
Юзал поиск не чего ни нашел к сожалению Есть переменная score типа int Нужно чтобы если пользователь выходит из программы то...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru