Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.03.11;
Скачать: [xml.tar.bz2];

Вниз

Доступ к ресурсам   Найти похожие ветки 

 
Познающий   (2007-02-20 15:44) [0]

Подскажите пожалуйста господа специалисты,
есть у меня процедурка, которая читает текстовый файл из ресурса самой проги. Мне необходимо в другой процедурке при необходимости произвести коррекцию текста и сохранить в ресурсах уже изменённый вариант. Извращение? наверное, но так нужно.
Читать из ресурса я могу. Вот как бы сохранить опять там же, учитывая что размер останентся тот же?
По идее это же где-то в памяти находится.
Может как-то можно узнать адрес и работать с участком памяти где находится нужный мне ресурс?
Я пока плаваю, извините если криво вопрос поставил.
Помогите хоть идеями, так как наврядли кто-то так извращался.


 
Elen ©   (2007-02-20 16:01) [1]


> Познающий   (20.02.07 15:44)

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


 
Познающий   (2007-02-20 16:20) [2]

Нет, мне именно так нужно.
В том-то и дело.
Я бы кучу красивых других вариантов нашол бы,
но есть условие работы только с ресурсами проги.
Мне нужно написать только процедурку зная название ресурса и всё.
Процедура должна только расшифровать текстовый ресурс для дальнейшего нормального его использования.
Да, криво, боком ну так хотят.
А для меня просто стало интересно как можно это реализовать.


 
Сергей М. ©   (2007-02-20 16:23) [3]


> Познающий   (20.02.07 15:44)


Документированными способами задача не реализуема.


 
Elen ©   (2007-02-20 16:24) [4]


> Познающий   (20.02.07 16:20) [2]

Ну тогда сделай обмен между прогами (например через сокеты - лично мое мнение это особенно удобно)


> Нет, мне именно так нужно.

Это не ответ. Один и тот же результат можно получить разными способами, и лучше выбирать из них более подходящие для обстановки. Может твое решение не единственное тебе подходящее.


 
Elen ©   (2007-02-20 16:25) [5]


> Познающий   (20.02.07 16:20) [2]

Так подожди ты хочеш вытянуть из проги ресурс не запуская ее?


 
Сергей М. ©   (2007-02-20 16:32) [6]


> Elen ©   (20.02.07 16:25) [5]


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


 
Познающий   (2007-02-20 16:44) [7]

2Сергей М.
Почти так и есть.
В своей же проге при её загрузке модифицировать вложенный в неё ресурс.
А как не документированными способами?
Извините, я пока плохо разбираюсь, но разве настолько тяжело узнать адрес в памяти где находится нужный ресурс и модифицировать его?


 
Elen ©   (2007-02-20 16:45) [8]


> но разве настолько тяжело узнать адрес в памяти где находится
> нужный ресурс и модифицировать его?

Нет, но НАФИГА???? Задача какая?


 
Сергей М. ©   (2007-02-20 16:48) [9]


> А как не документированными способами?


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


> узнать адрес в памяти где находится нужный ресурс и модифицировать
> его


В памяти модифицируй себе сколько угодно.
А в соотв.файле модифицировать оные же документированными способами запрещено.


 
Познающий   (2007-02-20 17:06) [10]

2Сергей М.
Так мне и нужно в памяти модифицировать когда прога загружена.
Как узнать адрес где ресурс находится?

что бы потом типа такого:

asm
mov si, offset resource
mov cx, 1024
m1:
xor byte ptr [si + cx], $f0
loop m1
end;


 
Сергей М. ©   (2007-02-20 17:16) [11]

Кулхацкер ?)


> mov si


Ты вообще в курсе, что ВАП прикладного процесса в Win32 - 32-хразрядное ?


 
koha ©   (2007-02-20 17:18) [12]

> Познающий   (20.02.07 17:06) [10]
 
- Однако тебе на другой форум нужно.


 
Познающий   (2007-02-20 17:41) [13]

да я не про то.
написал как попало побыстрей что бы понятно было.
я же в своей же проге это
делаю, причем тут кулхацкеры...

прога у меня на дельфях, кусок кривого асма для примера.
ну так можно или нет?
чирканите пару строчек если не в лом, или пол дня вас упрашивать поделиться знанием ;)


 
koha ©   (2007-02-20 17:47) [14]

- я так думаю ИХМО, что тебе надо туда, где "кодеры-ковбои пасут на лугах mikrosoft священных коров говорящих на асемблере"


 
Познающий   (2007-02-20 18:13) [15]

procedure workResource(myOffset: DWord);
begin
  // Как на паскале это будет выглядеть?
end;

begin
  workResource(Как узнать адрес нужного ресурса);
end;

2koha ©
а Вам бы посоветовал если отсутствует желание помогать другим просто хотя бы не отвечать

Я бы написал на паскале если бы знал как.
Для меня первое узнать адрес.
Процедуру уже бы сам вычислял как написать.


 
koha ©   (2007-02-20 18:48) [16]

- Так то есть клыссы которые работают с ресурсами:
 TResourceStream, function FindResource, TResHeader


 
Познающий   (2007-02-20 20:05) [17]

Я так понимаю создастся отдельный поток с данным ресурсом, а мне нужно изменить ресурс в памяти самой проги, что бы далее другие вызовы TResourceStream.create(hinstance, "test.txt", RT_RCDATA) уже читали мои изменённые данные.
Суть в том, что посторонний человек пишет прогу, которая работает с данными в ресурсе. Мне нужно написать только процедуру, которую он добавит на создание формы, которая проверит регистрацию и если всё гуд, то расшифрует данные, находящиеся в ресурсе, с которыми он сам будет дальше работать через TResourceStream.create
Мне было бы проще самому переписать его прогу и забыть про это, но парень молодой, пусть сам учится и хвастается перед своими друзьями, мне только вот нужно помочь с этим детским вариантом декриптора, а сам только по базам данным что-то волоку.


 
koha ©   (2007-02-20 20:51) [18]

Не знаю даже возможно ли это стандартными средствами, TResourceStream.Write Объявлена так:

function TResourceStream.Write(const Buffer; Count: Longint): Longint;
begin
 raise EStreamError.CreateRes(@SCantWriteResourceStreamError);
end;


Но если перенаследовать класс и перекрыть эту процедуру своей то впринципе можно и добиться результата. TResourceStream он потомок TCustomMemoryStream - а у этот и как читает так и пишет в памать.
А еще стоит в процедуру инициализации заглянуть в общем там тоже может что переделыввать нужно будет.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2007.03.11;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.039 c
2-1171643622
sat
2007-02-16 19:33
2007.03.11
delay??


2-1172051790
antonn
2007-02-21 12:56
2007.03.11
Отрисовка Tedit на другом Tcanvas


4-1160470572
AlexT1000
2006-10-10 12:56
2007.03.11
Запрет запуска приложений. Как реализовать?


15-1171643866
TUser
2007-02-16 19:37
2007.03.11
Про system restore


15-1171313468
DemonP
2007-02-12 23:51
2007.03.11
Рассчитать состав типовой ЭВМ для сервера





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский