Понедельник, 29.04.2024
Королевство Delphi
Главное меню
Статьи
Наш опрос
Как часто ви на этот сайт заходите?
Всего ответов: 159
Статистика
Онлайн всего: 1
Гостей: 1
Пользователей: 0
Форма входа
Главная » Статьи » Система » CORBA и COM

Добавить данные в EXE файл и получить их
function AttachToFile(const AFileName: string; MemoryStream: TMemoryStream): Boolean;
var 
 aStream: TFileStream; 
 iSize: Integer; 
begin 
 Result := False; 
 if not FileExists(AFileName) then 
 Exit; 
 try 
 aStream := TFileStream.Create(AFileName, fmOpenWrite or fmShareDenyWrite); 
 MemoryStream.Seek(0, soFromBeginning); 
 // seek to end of File 
 // ans Ende der Datei Seeken 
 aStream.Seek(0, soFromEnd); 
 // copy data from MemoryStream 
 // Daten vom MemoryStream kopieren 
 aStream.CopyFrom(MemoryStream, 0); 
 // save Stream-Size 
 // die Streamgro?e speichern 
 iSize := MemoryStream.Size + SizeOf(Integer); 
 aStream.Write(iSize, SizeOf(iSize)); 
 finally 
 aStream.Free; 
 end; 
 Result := True; 
end; 

function LoadFromFile(const AFileName: string; MemoryStream: TMemoryStream): Boolean; 
var 
 aStream: TFileStream; 
 iSize: Integer; 
begin
 Result := False; 
 if not FileExists(AFileName) then 
 Exit; 

 try 
 aStream := TFileStream.Create(AFileName, fmOpenRead or fmShareDenyWrite); 
 // seek to position where Stream-Size is saved 
 // zur Position seeken wo Streamgro?e gespeichert 
 aStream.Seek(-SizeOf(Integer), soFromEnd); 
 aStream.Read(iSize, SizeOf(iSize)); 
 if iSize > aStream.Size then 
 begin 
 aStream.Free; 
 Exit; 
 end; 
 // seek to position where data is saved 
 // zur Position seeken an der die Daten abgelegt sind 
 aStream.Seek(-iSize, soFromEnd); 
 MemoryStream.SetSize(iSize - SizeOf(Integer)); 
 MemoryStream.CopyFrom(aStream, iSize - SizeOf(iSize)); 
 MemoryStream.Seek(0, soFromBeginning); 
 finally 
 aStream.Free; 
 end; 
 Result := True; 
end; 

procedure TForm1.SaveClick(Sender: TObject); 
var 
 aStream: TMemoryStream; 
begin
 aStream := TMemoryStream.Create; 
 Memo1.Lines.SaveToStream(aStream); 
 AttachToFile('Test.exe', aStream); 
 aStream.Free; 
end; 

procedure TForm1.LoadClick(Sender: TObject); 
var 
 aStream: TMemoryStream; 
begin 
 aStream := TMemoryStream.Create; 
 LoadFromFile('Test.exe', aStream); 
 Memo1.Lines.LoadFromStream(aStream); 
 aStream.Free; 
end; 

{ 

Note: 

You can't proof whether additional data is attached or not. 
To reach this, you would have to create a checksumm of the 
MemoryStream and attach it.

}

Получить ссылку на материал

Категория: CORBA и COM | Добавил: Барон (09.12.2011)
Просмотров: 1121 | Теги: файл, EXE | Рейтинг: 0.0/0
[ Пожертвования для сайта ] [ Пожаловаться на материал ]

Если вам помог материал сайта кликните по оплаченной рекламе размещенной в центре

Поиск
Категории раздела
ActiveX [10]
CORBA и COM [16]
Kol и MCK [23]
WinAPI [28]
Компоненты [27]
Работа с Bluetooth [4]
Железо [8]
Текст [18]
Разное [98]
Королевство Delphi © 2010-2024
Яндекс цитирования