Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.11.21;
Скачать: CL | DM;

Вниз

Как можно зашить в программу dll?   Найти похожие ветки 

 
hgd   (2004-11-03 09:18) [0]

У меня в программе используются dll, я хочу чтобы они были в программе "зашиты". Как можно зашить в программу dll?


 
Reindeer Moss Eater ©   (2004-11-03 09:19) [1]

включи модули dll в uses своей программы


 
hgd   (2004-11-03 09:22) [2]

спасибо, а как просто написать
uses mydll.dll ?


 
Reindeer Moss Eater ©   (2004-11-03 09:30) [3]

Нет.
Так dll просто "пришьется" к программе.
А если хочешь её "зашить", надо в uses включать *.pas модули этой длл.


 
hgd   (2004-11-03 09:34) [4]

ой... а можно создать такой pas модуль, если есть только dll


 
Reindeer Moss Eater ©   (2004-11-03 09:35) [5]

Конечно можно.
Запускаем FAR и жмем Shift+F4. Вводим имя файла.


 
hgd   (2004-11-03 09:42) [6]

тоесть dll переименовать в pas?


 
Digitman ©   (2004-11-03 09:45) [7]


> hgd


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


 
Reindeer Moss Eater ©   (2004-11-03 09:47) [8]

тоесть dll переименовать в pas?

переименовать это F6, а не Shist+F4


 
Sergey_Masloff   (2004-11-03 09:57) [9]

Digitman ©   (03.11.04 09:45) [7]
>ты хоть бы сподобился что ли пояснить. что конкретно ты >подразумеваешь под термином "зашить" ... и по какому поводу >тебя посетила сия блажь ...
Бинарный код DLL вшить в EXE видимо. Видимо, частично избежать DLL HELL хочет. И не одинок он в этом, и даже есть утилита чуть ли не в MS Platform SDK которая это делает. Насчет Platform SDK могу наврать но что есть такое чудо - 100%


 
1008 ©   (2004-11-03 10:05) [10]

Можно, например, порыться тут: http://www.delphiworld.narod.ru/

Я там нашёл следующее: Добавить данные в 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;

Может есть ещё чего, но искать лень.


 
Digitman ©   (2004-11-03 10:07) [11]


> Sergey_Masloff   (03.11.04 09:57) [9]


все равно же блажь .. но уж если на то пошло, то и утилит никаких не нужно, достаточно сформировать ресурс, содержащий бин.образ


 
Sergey_Masloff   (2004-11-03 17:08) [12]

Digitman ©   (03.11.04 10:07) [11]
>все равно же блажь ..
Чистейшей воды
>но уж если на то пошло, то и утилит никаких не нужно, >достаточно сформировать ресурс, содержащий бин.образ
хм... а толку? Ты ж в ресурс управление не передашь?
Та утилита непосредственно секции исполняемого кода EXE модифицировала добавляя код DLL и переставляя все вызовы функций DLL на адреса функций в теле того же EXE. Вобщем, еще тот изврат  но видел лично. Правда, такого функционала мне не нужно было поэтому не экспериментировал сам.


 
Digitman ©   (2004-11-03 17:15) [13]


> хм... а толку? Ты ж в ресурс управление не передашь?


а наЩет передачи какого-то там "управления" речи в вопросе не шло ... звыняйте уж) ... "зашить" - это одна опера,  передать какое-то там куда-то там "управление" - совершенно иная опера ... согласишься ведь 7


 
Sergey_Masloff   (2004-11-03 21:43) [14]

Sergey_Masloff   (03.11.04 17:08) [12]
>согласишься ведь
куда я денусь...


 
Игорь Шевченко ©   (2004-11-03 23:27) [15]


> Та утилита непосредственно секции исполняемого кода EXE
> модифицировала добавляя код DLL и переставляя все вызовы
> функций DLL на адреса функций в теле того же EXE


И настраивая relocations в самой DLL ? Неслабая работа, однако.

А вот в блаженной памяти операционных системах для EC ЭВМ такие фокусы можно было довольно легко проделать на уровне линкера, благо формат EXEшников позволял...



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

Текущий архив: 2004.11.21;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.024 c
1-1099857220
Turbid
2004-11-07 22:53
2004.11.21
Убиение ряда в 2-мерном динамическом массиве


14-1099252959
Bend
2004-10-31 23:02
2004.11.21
RichEdit & гиперссылки


1-1099935857
White__
2004-11-08 20:44
2004.11.21
Шаблоны в Delphi7


1-1100007914
iudjen
2004-11-09 16:45
2004.11.21
как прикрепить файл


14-1099647423
vecna
2004-11-05 12:37
2004.11.21
Всем плакать от смеха!