Форум: "Начинающим";
Текущий архив: 2006.08.20;
Скачать: [xml.tar.bz2];
ВнизСтатистическая загрузка dll Найти похожие ветки
← →
FFx01 © (2006-07-31 22:42) [0]В моё приложение встроен res файл- это dll"ка, в этом же приложении прописана загрузка это dll"ки, загружаю её я статистически.
При запуске приложения, функции загрузки из dll пытается загрузить еще не распакованную dll. В dll"ке прописаны 2 процедуры, которые и экспортируются, а затем в приложении
function fdll: Longint;external "date.dll" name "fdll"; загружаются.
Как мне правильно написать, что бы все было хорошо?.
p.s. вариант с res приложением в месте с dll отпадает.
← →
Ketmar © (2006-07-31 23:40) [1]написать драйвер IFS, который будет понимать ресурсы как файлы. или не маяться фигнёй, и грузить динамикой, предварительно распаковав во временный каталог.
ещё -- можно использоваться ntfs-потоки, но работать будет только на ntfs. %-) и если копироваться/архивировать/распаковывать программами, которые с потоками не знакомы, будет печально.
← →
Джо © (2006-07-31 23:42) [2]Так, маленькое замечание терминологического характера. Статическая. Статическая, а не "статистическая". :)
← →
tesseract © (2006-07-31 23:48) [3]> функции загрузки из dll пытается загрузить еще не распакованную
> dll.
Естественно будут проблемы, типа пытаемся завести машину и жалуемся на отсутсвие бензина. ИМХО только динамическая загрузка спасёт партию.
← →
GanibalLector © (2006-07-31 23:51) [4]> или не маяться фигнёй, и грузить динамикой, предварительно распаковав во временный каталог.
Вот тебе на всякий случай
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;
//
← →
Шпиён (2006-08-01 04:32) [5]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
Сам не пробовал -)
← →
nt (2006-08-01 08:33) [6]> но не хочется таскать со своим проектом чужие модули. В
> этом случае, конечно, можно прилинковать эти dll к файлу
> и перед их использованием копировать их на диск,
...и они станут своими, ахха, щаз.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.08.20;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.04 c