Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 6 118

Раздел: Delphi » Прочее
/ вопрос открыт /

Здравствуйте, эксперты!
Мне надо хранить переменную типа String внутри исполняемого файла (exe). Вся загвоздка в том, что по завершении работы мне надо изменить данные, а при следующем включении прочитать. Читал про хранение файлов и переменных в ресурсов, но как изменять ресурсы изнутри не нашел. Подскажите, пожалуйста!

Данилыч Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Данилыч (статус: Посетитель)
Вопрос отправлен: 6 мая 2012, 15:45
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 8; последнее сообщение — 10 мая 2012, 21:58; участников в обсуждении: 3.
min@y™

min@y™ (статус: Доктор наук), 6 мая 2012, 17:09 [#1]:

А вот так пробовал?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Данилыч

Данилыч (статус: Посетитель), 7 мая 2012, 20:01 [#2]:

Пробовал, ничего толкового, везде создание ресурсов, извлечение их, вшитие в другой exe...:-(
Вот нашёл более краткое использование ресурсов
resourcestring  DataString = 'Начальный текс';
 
procedure TForm1.HookResourceString(rs: PResStringRec; newStr: PChar);
var
 oldprotect: DWORD;
begin
VirtualProtect(rs, SizeOf(rs^),PAGE_EXECUTE_READWRITE,@oldProtect);
rs^.Identifier := Integer(newStr);
VirtualProtect(rs, SizeOf(rs^), oldProtect, @oldProtect);
end;
 
procedure TForm1.FormClose(Sender: TObject; var Action:TCloseAction); //изменение строкового ресурса
begin
HookResourceString(@DataString,PChar('Нейкое число подсчитаное программой во время выполнения'));
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
Label1.Caption:=DataString;
end;

Работает, если изменить ресурс до закрытия программы(не в FormClose), а после закрытия он снова становится 'Начальный текс' :-(
Как сохранить?
Данилыч

Данилыч (статус: Посетитель), 7 мая 2012, 22:34 [#3]:

Кстати http://ts.moy.su/publ/10-1-0-26 Будет вообще работать будет(завтра буду пробовать)? Я имею ввиду запустится ли exe?
Phantom

Phantom (статус: Посетитель), 10 мая 2012, 14:22 [#4]:

Здравствуйте! Могу дать вам один "детский" совет. Можно при выполнении программы записать значение переменной в нетипизированный файл, а при следующем включении считать оттуда. Удачи!
min@y™

min@y™ (статус: Доктор наук), 10 мая 2012, 14:30 [#5]:

Цитата (Phantom):

Могу дать вам один "детский" совет. Можно при выполнении программы записать значение переменной в нетипизированный файл, а при следующем включении считать оттуда.

Гениально! И чо мы сразу не догадались, а?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Данилыч

Данилыч (статус: Посетитель), 10 мая 2012, 20:53 [#6]:

Могу дать вам один "детский" совет. Можно при выполнении программы записать значение переменной в нетипизированный файл,
а при следующем включении считать оттуда.

Некомпактно. Всегда удобней иметь один большой exe чем маленький exe и много файлов. Тем более что мне надо записать 3 переменных по байту, создовать ради токого txt или dat просто стыдно 8-)
Phantom

Phantom (статус: Посетитель), 10 мая 2012, 21:50 [#7]:

Проблема в том, что после компиляции переменные автоматически инициализируются нулями. Во время выполнения программы их можно проинициализировать нужными значениями, но по выходу из проги, они содержат снова null. В данной проблеме сам разобраться не могу. Может, есть специальные APIшные функции?
Данилыч

Данилыч (статус: Посетитель), 10 мая 2012, 21:58 [#8]:

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

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:52
Выполнено за 0.03 сек.