Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.08.20;
Скачать: 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 вся ветка

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

Наверх




Память: 0.48 MB
Время: 0.032 c
2-1154025099
CyberWoman
2006-07-27 22:31
2006.08.20
Как считать данные из файла и выдать их в окно?


2-1153988032
1519
2006-07-27 12:13
2006.08.20
Завершение работы


2-1154440550
lorn
2006-08-01 17:55
2006.08.20
treview значение узла


2-1154586636
Кирей
2006-08-03 10:30
2006.08.20
как открыть Query12 - Query31


3-1150258551
Rubey
2006-06-14 08:15
2006.08.20
Ошибка поля MEMO