Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.05.2011, 19:20   #11
xrob
Форумчанин
 
Регистрация: 18.10.2010
Сообщений: 419
По умолчанию

"я попробовал добавить ресурс (текстовый файл с 'bugoga!') стандартными средствами,
потом найти его в скомпиленом ехе - не нашел."
кстати, интересно почему?...
если, как вы говорите, ресурсы не кодируются, то почему я тогда не нашел 'bugoga!'?
с помощью Resource Builder 3 скомпилил *.res, дописал директиву в юнит,
скомпилил прогу, открываю ехе в блокноте - не находит то что было в файле ресурсов...
xrob вне форума Ответить с цитированием
Старый 25.05.2011, 20:01   #12
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Цитата:
Сообщение от xrob Посмотреть сообщение
если, как вы говорите, ресурсы не кодируются, то почему я тогда не нашел 'bugoga!'?
Может быть, потому, что в ресурсах оно было в юникоде, а файл открыл как ansi?
Somebody вне форума Ответить с цитированием
Старый 25.05.2011, 20:04   #13
Swarog
Форумчанин
 
Аватар для Swarog
 
Регистрация: 26.01.2010
Сообщений: 215
По умолчанию

насчет ресурсов не знаю а вот к концу экзешника цеплял свои данные. работало все замечательно, может вы не в то место вставляете свои данные?

делал это примерно так...

Код:
 outSt := TFileStream.Create(edit2.Text {имя ехе не запущенного!},fmOpenWrite);
 outSt.Seek(0,soFromEnd);

 ist := TFileStream.Create(ts +'\buf.tmp',fmOpenRead	);

 repeat
  t := ist.Read(buf2,512);
  outSt.Write(buf2, 512);
  if ist.Size <> 0 then
   begin
    statusbar1.Panels[5].Text := inttostr(ist.Position * 100 div ist.Size) + '%';
    application.ProcessMessages;
   end;
 until t = 0;

 t:= outSt.Size - st;  // пишем размер наших данных
 outSt.Write(t, 4);

 t:= $00415753;
 outSt.Write(t, 4); // а это просто сигнатура по которой будем знать что данные имеются

 outSt.Free;
ну и собственно чтение

Код:

    ExeStream := TFileStream.Create(
      application.ExeName
     ,fmOpenRead or fmShareDenyWrite);

    ExeStream.Seek(ExeStream.Size - 4,soFromBeginning);

    ExeStream.Read(t,4);
    if t <> $00415753 then
     begin
      application.MessageBox('Нет каталога, либо файл поврежден','Ошибка',0);
      exit;
     end;
    ExeStream.Seek(ExeStream.Size - 8, soFromBeginning);
    ExeStream.Read(Start,4);
    FileOffset := ExeStream.Size - Start - 8;
    ExeStream.Seek(FileOffset, soFromBeginning);

// здесь укзатель уже на начале нашего буфера
вот как то так. в последнем примере не разрушаю поток так как он используется на протяжении всего времени работы программы, но он уничтожается в секции finalization
Могу лишь пнуть в нужном направлении (ну или как получится)
Swarog вне форума Ответить с цитированием
Старый 25.05.2011, 20:10   #14
Swarog
Форумчанин
 
Аватар для Swarog
 
Регистрация: 26.01.2010
Сообщений: 215
По умолчанию

Цитата:
Сообщение от Somebody Посмотреть сообщение
Может быть, потому, что в ресурсах оно было в юникоде, а файл открыл как ansi?
Кстати тоже замечал допустим есть некие констнаты в приложении поиском в ехе их порой не найти, я конечно пользовался не блкнотом , и все же данного текста в открытом виде не было. Юникод отпадает сообщение было на английском. Да и в юникоде тоже не ищется.
Могу лишь пнуть в нужном направлении (ну или как получится)
Swarog вне форума Ответить с цитированием
Старый 25.05.2011, 20:37   #15
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Цитата:
Сообщение от Swarog Посмотреть сообщение
Юникод отпадает сообщение было на английском.
Юникод не отпадает, потому что в UTF-16 два байта на символ - даже с английскими буквами перед каждой будет ещё нулевой байт.
Цитата:
Сообщение от Swarog Посмотреть сообщение
Кстати тоже замечал допустим есть некие констнаты в приложении поиском в ехе их порой не найти
Может, exe упакованный?
Somebody вне форума Ответить с цитированием
Старый 25.05.2011, 20:53   #16
Swarog
Форумчанин
 
Аватар для Swarog
 
Регистрация: 26.01.2010
Сообщений: 215
По умолчанию

Цитата:
Юникод не отпадает, потому что в UTF-16 два байта на символ - даже с английскими буквами перед каждой будет ещё нулевой байт.
с нулями тоже не нашел
Могу лишь пнуть в нужном направлении (ну или как получится)
Swarog вне форума Ответить с цитированием
Старый 25.05.2011, 21:36   #17
xrob
Форумчанин
 
Регистрация: 18.10.2010
Сообщений: 419
По умолчанию

"даже с английскими буквами перед каждой будет ещё нулевой байт" ???
а как такая строка, скажите мне, сочетается с PChar? никак?
если в PChar #0 это конец строки!...

а я вообще делал так:
assignfile(test,filename);
reset(test);
seek(test,filesize(test));
// ну и дальше дописываешь что нужно...

проблема наверное в том что
seek(test,filesize(test));
устанавливает каретку НА последний символ, а не после него... (да?)
а в результате при последующей записи стирается последний символ ехе-шника.

а правильно ли тода будет написать seek(test,filesize(test)+1); ?
xrob вне форума Ответить с цитированием
Старый 26.05.2011, 00:23   #18
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
а как такая строка, скажите мне, сочетается с PChar? никак?
если в PChar #0 это конец строки!...
спокойно сочетается.
ибо терминал в WideChar тоже два байта весит, а не один.
Цитата:
устанавливает каретку НА последний символ, а не после него... (да?)
нет.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 26.05.2011, 03:24   #19
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Поразительный топик. Столько всяких "у меня не работает", "не могу найти"... и хоть бы кто почесался привести последовательность действий/код, которые у него "не работают".

Напоминает: http://bash.org.ru/quote/410956
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
конец файла boomeer Общие вопросы C/C++ 2 04.08.2010 15:55
ехе который запускает другой ехе CrOsP Фриланс 12 24.06.2010 18:59
Конец Света! Linker88 Свободное общение 82 15.06.2009 18:34
Как сделать ехе для программы DiSpalL Помощь студентам 4 31.05.2009 22:21