Вниз
Скачать: CL | DM;

Статистическая загрузка 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.031 c
1-1151975555
dwar
2006-07-04 05:12
2006.08.20
indy 9.0.18 проблеммы установки


15-1153471122
tButton
2006-07-21 12:38
2006.08.20
Мексика


2-1154188365
fog
2006-07-29 19:52
2006.08.20
Печать


15-1153806797
Ega23
2006-07-25 09:53
2006.08.20
С Днём рождения! 25 июля


4-1144670484
Acidlex
2006-04-10 16:01
2006.08.20
Измерение уровня входного сигнала звуковой карты




   Наверх