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

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

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

Delphi.int.ru Expert

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

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

#   

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


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

Подробнее »



Вопрос # 5 508

/ вопрос закрыт /

Доброго времени суток, уважаемые эксперты!
Не судите строго за вопрос, но возникли сложность с обновлением строкового ресурса в программе.

1 проблема видимо в том, что программа пытается обновить ресурс в самой себе, а следовательно натыкается на файл который исполняется и не может его обновить. На сколько я помню - можно при запуске загружать программу в оперативную память и дальше работать с копией из памяти, следовательно можно будет спокойно работать с ресурсами из ехе. Но это не самое важное, основная проблема в другом.

2 проблема - так как я не могу получить доступ к файлу, попытался обновить информацию у этой же программы но положеной в другую директорию, а следовательно не выполняемую. НО после выполнения кода, который ни на что не ругается (проверял GetLastError после каждой команды и ругнулось только на s:=StrToInt(year_on) и выдало 8, хотя год и присваивается какой нужно), и проверке ресурсов программы через restorator - данные те же, что и были ранее.

Надеюсь на вашу помощь.
Прилагаю листинг процедуры в которой и возникает проблема.
Код показывает что я пытаюсь обновить ресурс как исполняемого файла, так и не исполняемого, но информация не обновляется нигде.
Исполняемый файл находится в D:\DirPath\ProgramDirPath\poschitalka.exe

Приложение:
  1. procedure TDate_change.Ok_buttonClick(Sender: TObject);
  2. var
  3. day_on,month_on,year_on:word;
  4. date_on:tdatetime;
  5. res:THandle;
  6. s:string;
  7. qwerty:integer;
  8. nam:string;
  9. error_code:integer;
  10. Ptr : Pointer;
  11. begin
  12. nam:=Application.ExeName;
  13.  
  14. date_on:=monthCalendar1.date;
  15. decodedate(int(date_on),year_on,month_on,day_on);
  16.  
  17. s:=FloatToStr(year_on);
  18.  
  19. res:=BeginUpdateResource(PChar(nam),false);
  20. Ptr:=Addr(s);
  21. UpdateResource(res,RT_STRING,'65261',LANG_NEUTRAL,ptr,sizeof(s));
  22. EndUpdateResource(res,false);
  23. error_code:=getlasterror();
  24. ShowMessage(IntToStr(error_code));
  25. s:=FloatToStr(month_on);
  26. res:=BeginUpdateResource('D:\DirPath\poschitalka.exe',false);
  27. Ptr:=Addr(s);
  28. UpdateResource(res,RT_STRING,'65262',LANG_NEUTRAL,ptr,sizeof(s));
  29. EndUpdateResource(res,false);
  30. s:=FloatToStr(day_on);
  31. res:=BeginUpdateResource(PChar(nam),false);
  32. Ptr:=Addr(s);
  33. UpdateResource(res,RT_STRING,'65263',LANG_NEUTRAL,ptr,sizeof(s));
  34. EndUpdateResource(res,false);
  35. Close;
  36. end;


Pessimist Вопрос закрыт (ответы не принимаются, мини-форум закрыт)

Вопрос задал: Pessimist (статус: Посетитель)
Вопрос отправлен: 16 июля 2011, 21:38
Состояние вопроса: закрыт, ответов: 0.


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

Всего сообщений: 23; последнее сообщение — 18 июля 2011, 19:47; участников в обсуждении: 4.

Страницы: [1] [2] [Следующая »]

Gooddy

Gooddy (статус: 3-ий класс), 16 июля 2011, 21:51 [#1]:

Цитата:

nam

http://www.youtube.com/watch?v=6Krrczljx9w
Чисти код! Чисти код! Чисти код!
bugmenot

bugmenot (статус: 3-ий класс), 16 июля 2011, 23:43 [#2]:

Цитата (Pessimist):

который ни на что не ругается (проверял GetLastError после каждой команды

не вижу в коде.
алсо, "команда".
виконання програми розпочинається з того самого мiсця, де призупинилося.

min@y™

min@y™ (статус: Доктор наук), 17 июля 2011, 11:06 [#3]:

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

Pessimist (статус: Посетитель), 17 июля 2011, 16:33 [#4]:

Хочу, чтобы настройки таскались за программой, при этом не используя реестр и дополнительные файлы. А так - для общего развития хорошо бы понять как же обновить ресурсы в другом ехе файле.

Неужели никто не имел дела с изменением ресурсов в ехе файлах?
Pessimist

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™

min@y™ (статус: Доктор наук), 18 июля 2011, 08:20 [#6]:

Цитата (Pessimist):

Очень надеюсь на вас.

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

bugmenot (статус: 3-ий класс), 18 июля 2011, 09:59 [#7]:

Это в DOS было модно так делать. Там всё просто, надо перестать протирать до дыр Ctrl+V и подумать верхней головой достаточно прочитать описание в справочнике.
виконання програми розпочинається з того самого мiсця, де призупинилося.

Pessimist

Pessimist (статус: Посетитель), 18 июля 2011, 10:38 [#8]:

Редактор ресурса - ненужная ерунда? Локализатор для своих проектов например на нем можно построить...Ну да, зачем он нужен, можно же все держать в куче отдельных файлов, когда их существования можно избежать, а их наличие не дает прироста скорости.
min@y™

min@y™ (статус: Доктор наук), 18 июля 2011, 11:38 [#9]:

Цитата (Pessimist):

Ну да, зачем он нужен, можно же все держать в куче отдельных файлов

Не в куче файлов, а в одном файле.

Цитата (Pessimist):

а их наличие не дает прироста скорости.

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

Pessimist (статус: Посетитель), 18 июля 2011, 13:08 [#10]:

Отойти от слова настройки никак не получается? Хранить таким образом можно и языки для своих программ. Обращение к строкам находящимся в ресурсе проще некуда, но я решил начать с хранения в этих строках ресурсов. Редактор ресурса для упрощения локализации продукта - человеком который не разбирается в программировании - тоже бред не нужный.
min@y™

min@y™ (статус: Доктор наук), 18 июля 2011, 13:14 [#11]:

Цитата (Pessimist):

Отойти от слова настройки никак не получается? Хранить таким образом можно и языки для своих программ. Обращение к строкам находящимся в ресурсе проще некуда, но я решил начать с хранения в этих строках ресурсов. Редактор ресурса для упрощения локализации продукта - человеком который не разбирается в программировании - тоже бред не нужный.


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

min@y™ (статус: Доктор наук), 18 июля 2011, 13:21 [#12]:

Кстати, забыл сказать... Много народу занималось подобной куйнёй, у некоторых даже получалось. Но все они в итоге говорили, что нуевонах - овчинка выделки не стоит.

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

Gooddy (статус: 3-ий класс), 18 июля 2011, 13:28 [#13]:

Цитата:

Не трать время, браза, оно не бесконечное.

Иди выпей.
Чисти код! Чисти код! Чисти код!
min@y™

min@y™ (статус: Доктор наук), 18 июля 2011, 13:47 [#14]:

Цитата (Gooddy):

Иди выпей.

Ну повернулся я на 180°, ну открыл сейф. Там у меня 0,7 Арарат болтаеццо. 5 звездофф. Отхлебнул из горла грамм 50, закусил дыней.

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

Gooddy (статус: 3-ий класс), 18 июля 2011, 13:50 [#15]:

А я не тебе =P
Чисти код! Чисти код! Чисти код!
min@y™

min@y™ (статус: Доктор наук), 18 июля 2011, 14:02 [#16]:

Цитата (Gooddy):

А я не тебе

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

Gooddy (статус: 3-ий класс), 18 июля 2011, 14:10 [#17]:

Автору вопроса.
Чтоб не бездельничал а пошёл выпил.
Чисти код! Чисти код! Чисти код!
min@y™

min@y™ (статус: Доктор наук), 18 июля 2011, 14:13 [#18]:

Ну вот, блин... Зря я пузырь откупорил. Полгода хранил в сейфе, теперь придёццо допивать. Я уже и братву пригласил, Серёга пошёл в сельпо за икрой...
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Gooddy

Gooddy (статус: 3-ий класс), 18 июля 2011, 14:18 [#19]:

Почему зря то? Отдохнёшь.
Чисти код! Чисти код! Чисти код!
bugmenot

bugmenot (статус: 3-ий класс), 18 июля 2011, 14:20 [#20]:

Цитата (Gooddy):

Иди выпей.

йоду.
виконання програми розпочинається з того самого мiсця, де призупинилося.

Страницы: [1] [2] [Следующая »]

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

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