|
Вопрос # 5 508/ вопрос закрыт / |
|
Доброго времени суток, уважаемые эксперты!
Не судите строго за вопрос, но возникли сложность с обновлением строкового ресурса в программе.
1 проблема видимо в том, что программа пытается обновить ресурс в самой себе, а следовательно натыкается на файл который исполняется и не может его обновить. На сколько я помню - можно при запуске загружать программу в оперативную память и дальше работать с копией из памяти, следовательно можно будет спокойно работать с ресурсами из ехе. Но это не самое важное, основная проблема в другом.
2 проблема - так как я не могу получить доступ к файлу, попытался обновить информацию у этой же программы но положеной в другую директорию, а следовательно не выполняемую. НО после выполнения кода, который ни на что не ругается (проверял GetLastError после каждой команды и ругнулось только на s:=StrToInt(year_on) и выдало 8, хотя год и присваивается какой нужно), и проверке ресурсов программы через restorator - данные те же, что и были ранее.
Надеюсь на вашу помощь.
Прилагаю листинг процедуры в которой и возникает проблема.
Код показывает что я пытаюсь обновить ресурс как исполняемого файла, так и не исполняемого, но информация не обновляется нигде.
Исполняемый файл находится в D:\DirPath\ProgramDirPath\poschitalka.exe
Приложение: Переключить в обычный режим- procedure TDate_change.Ok_buttonClick(Sender: TObject);
- var
- day_on,month_on,year_on:word;
- date_on:tdatetime;
- res:THandle;
- s:string;
- qwerty:integer;
- nam:string;
- error_code:integer;
- Ptr : Pointer;
- begin
- nam:=Application.ExeName;
-
- date_on:=monthCalendar1.date;
- decodedate(int(date_on),year_on,month_on,day_on);
-
- s:=FloatToStr(year_on);
-
- res:=BeginUpdateResource(PChar(nam),false);
- Ptr:=Addr(s);
- UpdateResource(res,RT_STRING,'65261',LANG_NEUTRAL,ptr,sizeof(s));
- EndUpdateResource(res,false);
- error_code:=getlasterror();
- ShowMessage(IntToStr(error_code));
- s:=FloatToStr(month_on);
- res:=BeginUpdateResource('D:\DirPath\poschitalka.exe',false);
- Ptr:=Addr(s);
- UpdateResource(res,RT_STRING,'65262',LANG_NEUTRAL,ptr,sizeof(s));
- EndUpdateResource(res,false);
- s:=FloatToStr(day_on);
- res:=BeginUpdateResource(PChar(nam),false);
- Ptr:=Addr(s);
- UpdateResource(res,RT_STRING,'65263',LANG_NEUTRAL,ptr,sizeof(s));
- EndUpdateResource(res,false);
- Close;
- end;
 |
Вопрос задал: Pessimist (статус: Посетитель)
Вопрос отправлен: 16 июля 2011, 21:38
Состояние вопроса: закрыт, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 23; последнее сообщение — 18 июля 2011, 19:47; участников в обсуждении: 4.
Страницы: [1] [2] [Следующая »]
|
bugmenot (статус: 3-ий класс), 16 июля 2011, 23:43 [#2]:
Цитата (Pessimist):
который ни на что не ругается (проверял GetLastError после каждой команды
не вижу в коде.
алсо, "команда".
виконання програми розпочинається з того самого мiсця, де призупинилося.
|
|
min@y™ (статус: Доктор наук), 17 июля 2011, 11:06 [#3]:
Прочитал вопрос 3 раза. Не понял, для чего это надо. Аффтар, поясни, плиз.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Pessimist (статус: Посетитель), 17 июля 2011, 16:33 [#4]:
Хочу, чтобы настройки таскались за программой, при этом не используя реестр и дополнительные файлы. А так - для общего развития хорошо бы понять как же обновить ресурсы в другом ехе файле.
Неужели никто не имел дела с изменением ресурсов в ехе файлах?
|
|
Pessimist (статус: Посетитель), 17 июля 2011, 17:13 [#5]:
Перенес изменение ресурса в другое приложение (сделаю чтобы в нужный момент оно распаковывалось из ехе в котором мне нужно изменить ресурс,а после изменения перезапустит его.
Но все равно не получается обновить ресурс. Код незначительно изменил:
procedure TDate_change.Ok_buttonClick(Sender: TObject);
var
day_on,month_on,year_on:word;
date_on:tdatetime;
res:THandle;
s:string;
nam:string;
Ptr : Pointer;
year_id,month_id,day_id:word;
begin
year_id:=65261;
month_id:=65262;
day_id:=65263;
GetDir(0,nam);
date_on:=monthCalendar1.date;
decodedate(int(date_on),year_on,month_on,day_on);
s:=FloatToStr(year_on);
res:=BeginUpdateResource(PChar(nam+'\poschitalka.exe'),false);
Ptr:=Addr(s);
UpdateResource(res,RT_STRING,PChar(year_id),LANG_NEUTRAL,ptr,sizeof(s));
EndUpdateResource(res,false);
s:=FloatToStr(month_on);
res:=BeginUpdateResource(PChar(nam+'\poschitalka.exe'),false);
Ptr:=Addr(s);
UpdateResource(res,RT_STRING,PChar(month_id),LANG_NEUTRAL,ptr,sizeof(s));
EndUpdateResource(res,false);
s:=FloatToStr(day_on);
res:=BeginUpdateResource(PChar(nam+'\poschitalka.exe'),false);
Ptr:=Addr(s);
UpdateResource(res,RT_STRING,PChar(day_id),LANG_NEUTRAL,ptr,sizeof(s));
EndUpdateResource(res,false);
Close;
end;
После выполнения этого кода, ехе файл обновляется, о чем свидетельствует его моргание в explorer'у винды и так же дата изменения файла меняется. НО нужные мне строки не меняются на те значения которые я в нее хочу внести. Может не так обращаюсь к функциям?
Очень надеюсь на вас.
|
|
min@y™ (статус: Доктор наук), 18 июля 2011, 08:20 [#6]:
Цитата (Pessimist):
Очень надеюсь на вас.
Зря надеешься. Я уверен, что люди, сидящие у нас на портале, такой фигнёй не занимались никогда. И правильно делали.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
bugmenot (статус: 3-ий класс), 18 июля 2011, 09:59 [#7]:
Это в DOS было модно так делать. Там всё просто, надо перестать протирать до дыр Ctrl+V и подумать верхней головой достаточно прочитать описание в справочнике.
виконання програми розпочинається з того самого мiсця, де призупинилося.
|
|
Pessimist (статус: Посетитель), 18 июля 2011, 10:38 [#8]:
Редактор ресурса - ненужная ерунда? Локализатор для своих проектов например на нем можно построить...Ну да, зачем он нужен, можно же все держать в куче отдельных файлов, когда их существования можно избежать, а их наличие не дает прироста скорости.
|
|
min@y™ (статус: Доктор наук), 18 июля 2011, 11:38 [#9]:
Цитата (Pessimist):
Ну да, зачем он нужен, можно же все держать в куче отдельных файлов
Не в куче файлов, а в одном файле.
Цитата (Pessimist):
а их наличие не дает прироста скорости.
А их отсутствие даёт прирост в скорости? Ущипните меня...
Думаешь, будет заметно, что настройки из файла прочитались не за 10 миллисекунд, а за 50? Нюню.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Pessimist (статус: Посетитель), 18 июля 2011, 13:08 [#10]:
Отойти от слова настройки никак не получается? Хранить таким образом можно и языки для своих программ. Обращение к строкам находящимся в ресурсе проще некуда, но я решил начать с хранения в этих строках ресурсов. Редактор ресурса для упрощения локализации продукта - человеком который не разбирается в программировании - тоже бред не нужный.
|
|
min@y™ (статус: Доктор наук), 18 июля 2011, 13:14 [#11]:
Цитата (Pessimist):
Отойти от слова настройки никак не получается? Хранить таким образом можно и языки для своих программ. Обращение к строкам находящимся в ресурсе проще некуда, но я решил начать с хранения в этих строках ресурсов. Редактор ресурса для упрощения локализации продукта - человеком который не разбирается в программировании - тоже бред не нужный.
Желаю удачи.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
min@y™ (статус: Доктор наук), 18 июля 2011, 13:21 [#12]:
Кстати, забыл сказать... Много народу занималось подобной куйнёй, у некоторых даже получалось. Но все они в итоге говорили, что нуевонах - овчинка выделки не стоит.
Не трать время, браза, оно не бесконечное.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Gooddy (статус: 3-ий класс), 18 июля 2011, 13:28 [#13]:
Цитата:
Не трать время, браза, оно не бесконечное.
Иди выпей.
Чисти код! Чисти код! Чисти код!
|
|
min@y™ (статус: Доктор наук), 18 июля 2011, 13:47 [#14]:
Цитата (Gooddy):
Иди выпей.
Ну повернулся я на 180°, ну открыл сейф. Там у меня 0,7 Арарат болтаеццо. 5 звездофф. Отхлебнул из горла грамм 50, закусил дыней.
Что дальше?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Gooddy (статус: 3-ий класс), 18 июля 2011, 13:50 [#15]:
А я не тебе =P
Чисти код! Чисти код! Чисти код!
|
|
min@y™ (статус: Доктор наук), 18 июля 2011, 14:02 [#16]:
Цитата (Gooddy):
А я не тебе
А кому? Цитата-то моя.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Gooddy (статус: 3-ий класс), 18 июля 2011, 14:10 [#17]:
Автору вопроса.
Чтоб не бездельничал а пошёл выпил.
Чисти код! Чисти код! Чисти код!
|
|
min@y™ (статус: Доктор наук), 18 июля 2011, 14:13 [#18]:
Ну вот, блин... Зря я пузырь откупорил. Полгода хранил в сейфе, теперь придёццо допивать. Я уже и братву пригласил, Серёга пошёл в сельпо за икрой...
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Gooddy (статус: 3-ий класс), 18 июля 2011, 14:18 [#19]:
Почему зря то? Отдохнёшь.
Чисти код! Чисти код! Чисти код!
|
|
bugmenot (статус: 3-ий класс), 18 июля 2011, 14:20 [#20]:
Цитата (Gooddy):
Иди выпей.
йоду.
виконання програми розпочинається з того самого мiсця, де призупинилося.
|
Страницы: [1] [2] [Следующая »]
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|