|
Вопрос # 6 118/ вопрос открыт / |
|
Здравствуйте, эксперты!
Мне надо хранить переменную типа String внутри исполняемого файла (exe). Вся загвоздка в том, что по завершении работы мне надо изменить данные, а при следующем включении прочитать. Читал про хранение файлов и переменных в ресурсов, но как изменять ресурсы изнутри не нашел. Подскажите, пожалуйста!
 |
Вопрос задал: Данилыч (статус: Посетитель)
Вопрос отправлен: 6 мая 2012, 15:45
Состояние вопроса: открыт, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 8; последнее сообщение — 10 мая 2012, 21:58; участников в обсуждении: 3.
|
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), а после закрытия он снова становится 'Начальный текс'
Как сохранить?
|
|
Phantom (статус: Посетитель), 10 мая 2012, 14:22 [#4]:
Здравствуйте! Могу дать вам один "детский" совет. Можно при выполнении программы записать значение переменной в нетипизированный файл, а при следующем включении считать оттуда. Удачи!
|
|
min@y™ (статус: Доктор наук), 10 мая 2012, 14:30 [#5]:
Цитата (Phantom):
Могу дать вам один "детский" совет. Можно при выполнении программы записать значение переменной в нетипизированный файл, а при следующем включении считать оттуда.
Гениально! И чо мы сразу не догадались, а?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Данилыч (статус: Посетитель), 10 мая 2012, 20:53 [#6]:
Могу дать вам один "детский" совет. Можно при выполнении программы записать значение переменной в нетипизированный файл,
а при следующем включении считать оттуда.
Некомпактно. Всегда удобней иметь один большой exe чем маленький exe и много файлов. Тем более что мне надо записать 3 переменных по байту, создовать ради токого txt или dat просто стыдно
|
|
Phantom (статус: Посетитель), 10 мая 2012, 21:50 [#7]:
Проблема в том, что после компиляции переменные автоматически инициализируются нулями. Во время выполнения программы их можно проинициализировать нужными значениями, но по выходу из проги, они содержат снова null. В данной проблеме сам разобраться не могу. Может, есть специальные APIшные функции?
|
|
Данилыч (статус: Посетитель), 10 мая 2012, 21:58 [#8]:
exe ведь самый обычный файл, в него можно записывать и читать Информацию. пример в ссылке выше. Другое дело что пока файл исполняется его изменить нельзя. В этом вся проблема
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|