![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Чтение из приложения в процессе выполнения
Артем22 © (2006-07-01 11:28:00)Чтение из приложения в процессе выполнения
Мне надо прочитать из конца собственного exe-файла некие данные в процессе выполения.
Делаю вот так:
img := GetImageSize(Application.ExeName); // размер image
fs := GetFileSize(Application.ExeName); // размер всего exe-файла
data := fs-img; // размер дополнительных данных
File := TFileStream.Create(Application.ExeName, fmOpenRead or fmShareDenyWrite);
File.Seek(img, soFromBeginning);
File.Read(perem, data);
Но загружает он почему-то с самого начала файла. Если вывести данные куда-нибудь, то выведется текст MZP.
Если дописать-что либо в конец, при запуске вылетит ошибка, но данные все равно будут прочитаны.
Надеюсь, с ДНК у меня все в порядке? :)
Артем22 (2006-07-02 08:08:00) [1]Спасибо огромное Пусику - все работает! :D
Игорь Шевченко (2006-07-01 22:19:00) [2]
> Размер exe-шника без оверлеев
А откуда в PE оверлеи ?
Пусик (2006-07-01 20:50:00) [3]
function GetImageSize(Instance:THandle):Cardinal;
var Index:Integer;
Header:PImageNtHeaders;
begin
Result:=0;
Inc(Instance,PImageDosHeader(Instance)._lfanew);
Header:=PImageNtHeaders(Instance);
Inc(Instance,SizeOf(TImageNtHeaders));
for Index:=1 to Header.FileHeader.NumberOfSections do begin
with PImageSectionHeader(Instance)^ do
if PointerToRawData+SizeOfRawData>Result then
Result:=PointerToRawData+SizeOfRawData;
Inc(Instance,SizeOf(TImageSectionHeader));
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
FS: TFileStream;
Buf: PChar;
BufLen: Int64;
ImgSize: Int64;
begin
FS := TFileStream.Create(ParamStr(0),fmOpenRead or fmShareDenyWrite);
ImgSize := GetImageSize(HInstance);
BufLen := FS.Size - ImgSize;
FS.Position := ImgSize;
GetMem(Buf,BufLen);
FS.Read(Buf[0],BufLen);
Memo1.Lines.Add(Buf);
FS.Free;
end;
Шпиён (2006-07-01 20:31:00) [4]Кстати, если функция GetFileSize взята именно "оттуда", то она вернет 0, т.к. не сможет открыть файл.
Шпиён (2006-07-01 20:22:00) [5]
> Артем22 (01.07.06 19:49) [5]
Тогда неплохо бы добавить, что сии функции ( GetImageSize и GetFileSize) взяты , например, вот отсюда:
http://www.delphikingdom.com/asp/answer.asp?IDAnswer=42523
чтобы можно было понять, что вообще должно происходить в твоем коде, а не телепатировать.
Артем22 (2006-07-01 19:49:00) [6]>> GetImageSize - это что?
Размер exe-шника без оверлеев
unknown (2006-07-01 19:35:00) [7]
> Артем22 (01.07.06 15:19) [2]
Некие данные можно и зашифровать, перед тем как поместить их в ресурс
приложения.
Пусик (2006-07-01 19:28:00) [8]1. GetImageSize - это что?
2. File.Seek(Data, soFromEnd);
Артем22 (2006-07-01 15:19:00) [9]Нет, читать нужно именно из самого exe-шника, из конца файла.
Ресурсы использовать нельзя, т.к. вытаскиваются легко. :)
Дмитрий Белькевич (2006-07-01 13:27:00) [10]Создавай и подключай ресурсы и их читай.