![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Статистическая загрузка dll [WinXP]
FFx01 © (2006-07-31 22:42:00)В моё приложение встроен res файл- это dll'ка, в этом же приложении прописана загрузка это dll'ки, загружаю её я статистически.
При запуске приложения, функции загрузки из dll пытается загрузить еще не распакованную dll. В dll'ке прописаны 2 процедуры, которые и экспортируются, а затем в приложении
function fdll: Longint;external 'date.dll' name 'fdll'; загружаются.
Как мне правильно написать, что бы все было хорошо?.
p.s. вариант с res приложением в месте с dll отпадает.
nt (2006-08-01 08:33:00) [1]> но не хочется таскать со своим проектом чужие модули. В
> этом случае, конечно, можно прилинковать эти dll к файлу
> и перед их использованием копировать их на диск,
...и они станут своими, ахха, щаз.
Шпиён (2006-08-01 04:32:00) [2]TFakeDll v1.1
Author: Dr.Golova
Последнее обновление: 06.06.02
TFakeDll - это Delphi объект, предназначенный для внедрения 32х битных библиотек (dll) в исполнимые файлы (Win32 PE Exe), написанные на Delphi. Иногда при написании программ приходится использовать библиотеки сторонних производителей (к примеру, библиотеки для работы с файловыми архивами), но не хочется таскать со своим проектом чужие модули. В этом случае, конечно, можно прилинковать эти dll к файлу и перед их использованием копировать их на диск, и уже оттуда подгружать. Это простой, но не слишком элегантный подход. TFakeDll позволяет (по крайней мере пробует) "прицепить" библиотеку к ехе файлу, и дает методы для его использования без промежуточного копирования на диск. Если быть кратким, то TFakeDll выполняет работу стандартного загрузчика Windows - этот объект копирует прилинкованную dll в память, настраивает ей импорт, релоки и предоставляет методы для работы с экспортируемыми функциями этой dll.
http://www.uinc.ru/scripts/load.cgi?files/dr.golova/TFakeDll.zip
Сам не пробовал -)
GanibalLector (2006-07-31 23:51:00) [3]> или не маяться фигнёй, и грузить динамикой, предварительно распаковав во временный каталог.
Вот тебе на всякий случай
function SaveOtherDLL(var FileName:String):Boolean;
var hRes,hResData:THandle;
Mem:Pointer;
hFile:Integer;
Buff : array [0..MAX_PATH] of Char;
begin
Result:=False;
if GetTempPath(SizeOf(Buff),Buff)<>0 then
begin
FileName:= StrPas(Buff)+LibName+'.tmp';
if FileExists(FileName) then
Result:=True else
begin
hRes:=FindResource(hInstance,LibName,RT_RCDATA);
if hRes<>0 then
begin
hResData:=LoadResource(HInstance,hRes);
if hResData<>0 then
begin
Mem:=LockResource(hResData);
hFile:=FileCreate(FileName);
if hFile<>-1 then
begin
if FileWrite(hFile,Mem^,SizeOfResource(hInstance,hRes))<>-1 then
Result:=True;
FileClose(hFile);
end;
end;
end;
end;
end;
end;
//
tesseract (2006-07-31 23:48:00) [4]> функции загрузки из dll пытается загрузить еще не распакованную
> dll.
Естественно будут проблемы, типа пытаемся завести машину и жалуемся на отсутсвие бензина. ИМХО только динамическая загрузка спасёт партию.
Джо (2006-07-31 23:42:00) [5]Так, маленькое замечание терминологического характера. Статическая. Статическая, а не "статистическая". :)
Ketmar (2006-07-31 23:40:00) [6]написать драйвер IFS, который будет понимать ресурсы как файлы. или не маяться фигнёй, и грузить динамикой, предварительно распаковав во временный каталог.
ещё -- можно использоваться ntfs-потоки, но работать будет только на ntfs. %-) и если копироваться/архивировать/распаковывать программами, которые с потоками не знакомы, будет печально.