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

Вниз

Как можно зашить в программу 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.815 c
14-1099551491
SPeller
2004-11-04 09:58
2004.11.21
Проблема с диспетчером задач


3-1098375015
Настенька
2004-10-21 20:10
2004.11.21
Типы полей


3-1098771490
yg
2004-10-26 10:18
2004.11.21
TOleException: ошибка подключения


14-1099760400
VID
2004-11-06 20:00
2004.11.21
Посоветуйте где можно прочитать об...


3-1098344203
rogiram
2004-10-21 11:36
2004.11.21
QuickReport без DataSet





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский