Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.01.23;
Скачать: CL | DM;

Вниз

странное поведение LoadLibrary ...   Найти похожие ветки 

 
vic_774N   (2004-11-29 19:12) [0]

Здравствуйте, мастера ...

Вот в чем проблема:
Код работает нормально. Но иногда, на определенном файле в точке
DLLHandle := LoadLibrary(PChar(FilePluginName));
происходит зависание. Приходится снимать приложение по трем кнопкам. В чем может быть проблема ? В другой программе этот же файл не вызывает зависания.


function GetPluginName(FilePluginName: string): string;
var
 DLLHandle : THandle;
 PluginName : array[0..255] of Char;
 Ext : string;
 _DefRootName : procedure(Name: PChar; maxlen : Integer); stdcall;
begin
 Ext := LowerCase(ExtractFileExt(FilePluginName));

 if Ext = ".wfx" then
 begin
   try
     DLLHandle := LoadLibrary(PChar(FilePluginName));
     try
       _DefRootName := GetProcAddress(DLLHandle, "FsGetDefRootName");
       if Assigned(_DefRootName) then
       begin
         _DefRootName(@PluginName, 256);
         Result := PluginName;
       end
        else
         Result := "Connect Plugin manually";
     finally
       FreeLibrary(DLLHandle);
     end;
   except
   end;
 end;
end;


пробовал использовать LoadLibraryEx ... тот же эффект


 
Alexander Panov ©   (2004-11-29 22:49) [1]

Для начала после DLLHandle := LoadLibrary попробуй проверять DLLHandle на равенство 0, а перед выполнением инициализируй DLLHandle := 0;

Да и неплохо бы показать код, который выполняется при инициализации библиотеки.


 
Piter ©   (2004-11-30 00:08) [2]

Alexander Panov ©   (29.11.04 22:49) [1]
Для начала после DLLHandle := LoadLibrary попробуй проверять DLLHandle на равенство 0


человек эе говорит о зависании... причем здесь проверка?

Да и неплохо бы показать код, который выполняется при инициализации библиотеки

а вот это да. Библиотека же не вернет управление, пока не выполнится DLLMain...

vic_774N   (29.11.04 19:12)

ты уверен что зависание именно на строчке DLLHandle := LoadLibrary(PChar(FilePluginName)); ?


 
Alexander Panov ©   (2004-11-30 00:48) [3]

человек эе говорит о зависании... причем здесь проверка?

Даже если это ни при чем, проверку нужно делать обязательно.


 
Alex_Petr ©   (2004-11-30 01:59) [4]

LoadLibraryEx(PChar(FileName),0,DONT_RESOLVE_DLL_REFERENCES); ?


 
vic_774N   (2004-12-01 05:57) [5]

to Alex_Petr: пробовал уже - аналогично.

to Alexander Panov: проблема то в том, что проверить нечего.
зависает именно при вызове DLLHandle := LoadLibrary(PChar(FilePluginName)); и только на одном определенном файле, другие обрабатываются без проблем. Трассирую отладчиком Delphi.

И нет у меня исходника той DLL, просто известна функция и что от неё получаю.


 
Alexander Panov ©   (2004-12-01 10:23) [6]

vic_774N   (01.12.04 5:57) [5]
зависает именно при вызове DLLHandle := LoadLibrary(PChar(FilePluginName)); и только на одном определенном файле


Тогда тут можно сказать только одно - проблема в этом файле DLL при загрузке которого виснет программа, а именно - в DLLEntryPoint.

Думаю, что ничем тут помочь нельзя...



Страницы: 1 вся ветка

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

Наверх




Память: 0.48 MB
Время: 0.026 c
14-1105211049
|Denis|
2005-01-08 22:04
2005.01.23
Unix системы. FreeBSD.


1-1105609194
Vetal
2005-01-13 12:39
2005.01.23
А как изменить цвет кнопки?


3-1103404096
Shamansky
2004-12-19 00:08
2005.01.23
Как совместить Dbgrid и dbcheckbox


1-1105284562
pasha L
2005-01-09 18:29
2005.01.23
Приравнивание одного шрифта к другому


9-1097644767
RRAIN
2004-10-13 09:19
2005.01.23
Поворот всей сцены в текущей позиции на Delphi