![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Не могу разобраться с выгрузкой Dll
Starkom © (2002-06-04 08:29:00)Хоть убей, не могу понять причину, по которой прога валится при FreeLibrary. Перед этим все нормально - происходит LoadLibrary, оттуда вызывается функция через GetProcAddress. А потом все падает при выгрузке.
Hate that never dies (2002-06-04 10:28:00) [21]>> Starkom:
>> Кстати, эта Dll сама активно использует Load(Free)Library других Dll"ек.
В блоке begin...end. выгружаемой библиотеки попробуй сделать явное Free всех библиоек, которые ты LoadLibrary в этой самой библиотеки.
Ошибка возможно происходит из-за того, что библиотека не может корректно освободить захваченные ресурсы.
MBo (2002-06-04 10:26:00) [22]кроме порядка передачи праметров, соглашение вызова регламентирует, кому очищать стек - вызывателю или вызываемому, так что это важно
Starkom (2002-06-04 10:19:00) [23]function LalaFunc (params): boolean; cdecl; - так описано в коде Dll. По-моему, если бы вызов функции был неправильный, то она работала бы неправильно (параметры бы, по идее, воспринялись бы неправильно), либо вообще бы не работала. А у меня работает правильно.
Игорь Шевченко (2002-06-04 10:11:00) [24]С соглашениями о вызовах у вас точно все нормально ?
Я насчет cdecl...
Starkom (2002-06-04 10:07:00) [25]код проги -
type
ProcType = function(params):PChar; cdecl;
...
libHnd := LoadLibrary ("lala.Dll");
proc := procType(GetProcAddress (libHnd, pchar("LalaFunc")));
proc (lalaparams); //происходит успешный вызов функции;
if not FreeLibrary(libHnd) then //валится на этой строчке
ShowMessage(GetLastError());
могут быть ошибки в синтаксисе, но смысл ясен. А код Dll физически не смогу показать - там архив исходников на 500 Кб.
Игорь Шевченко (2002-06-04 09:42:00) [26]Код бы посмотреть...
Starkom (2002-06-04 09:34:00) [27]Подскажите, хотя бы какие ресурсы используются при загрузке Dll, и как их очищать при выгрузке.
Starkom (2002-06-04 08:36:00) [28]Да нет, ошибка где-то в Dll, но я не могу понять где. Может кто-нибудь подскажет вероятные причины.
Кстати, эта Dll сама активно использует Load(Free)Library других Dll"ек.
MBo (2002-06-04 08:32:00) [29]вероятно, в программе ошибка ;)