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

Вниз

FreeLibrary... Что не так?   Найти похожие ветки 

 
Knight ©   (2006-03-14 09:42) [0]

Есть класс в нём подгружается библиотека и в Destroy лишь две строчки:
...
if (FLibHandle>32) and FreeLibrary(FLibHandle) then FLibHandle:=0;
inherited Destroy;
...


при выполнении второй строки вылетает Аксес Виалейшн, но если заремить первую, то, типа, ошибки нет.


 
Sergey Masloff   (2006-03-14 09:49) [1]

а ты вообще читал что FreeLibrary возвращает? И в курсе чем дельфийский Boolean отличается от сишногоо BOOLа?


 
Knight ©   (2006-03-14 09:53) [2]

Оно и просто так FreeLibrary(FLibHandle) не работает... в смысле, библиотека (по логам) выгружается, а потом ошибка вылетает :(


 
Lamer@fools.ua ©   (2006-03-14 09:55) [3]

>FLibHandle>32

Где вы такую траву берёте?

HMODULE LoadLibrary(
 LPCTSTR lpFileName
);

...

Return Values
If the function succeeds, the return value is a handle to the module.

If the function fails, the return value is NULL. To get extended error information, call GetLastError.


Ближе к сабджу:
>Есть класс в нём подгружается библиотека и в Destroy лишь две строчки

Ошибка в 17-й строке.

>>Sergey Masloff   (14.03.06 09:49) [1]
>И в курсе чем дельфийский Boolean отличается от сишногоо BOOLа?

Вообще-то компилятор автоматически преобразует, вроде.


 
Knight ©   (2006-03-14 09:59) [4]


> [3] Lamer@fools.ua ©   (14.03.06 09:55)
> >FLibHandle>32
>
> Где вы такую траву берёте?

Не критично... всё-равно оно МНОГО больше 32-ух...


 
Reindeer Moss Eater ©   (2006-03-14 10:02) [5]

Ошибка скорее всего в том, что после выгрузки библиотеки остаются невалидные ссылки на экспортируемые оттуда функции. Код класса на это не обращает внимания и вызывает уже несуществующие функции.

Либо ошибка внутри самой dll, если она самописная.


 
Knight ©   (2006-03-14 10:05) [6]

Функция есть, но она подключается динамически по одной процедуре... добавление нового экземпляра класса. Больше они ещё нигде не используются.


 
Reindeer Moss Eater ©   (2006-03-14 10:07) [7]

Используется. Иначе бы не было AV.
FreeLibrary не приводит к AV.


 
Гаврила ©   (2006-03-14 10:42) [8]

зайди по F7 внутрь inherited Destroy и посмотри, что происходит


 
GrayFace ©   (2006-03-14 11:12) [9]

Sergey Masloff   (14.03.06 09:49) [1]
И в курсе чем дельфийский Boolean отличается от сишногоо BOOLа?

По идее, тип этот в Delphi есть, а значит должен полностью поддерживаться.

P.S. Ошибка указана еще в [3], даже номер строки, где она находится.


 
Sergey Masloff   (2006-03-14 11:16) [10]

GrayFace ©   (14.03.06 11:12) [9]
Да? А на фига тогда ByteBool, WordBool, LongBool? Просто чтобы было? Я думаю в Борланде за строки кода лишних денег не платят чтобы просто так вводить ненужных типов.


 
Reindeer Moss Eater ©   (2006-03-14 11:23) [11]

Зачем заморачиваться с физическими булеанами, если имеешь дело с функцией из windows.pas ???


 
Reindeer Moss Eater ©   (2006-03-14 11:26) [12]

Тем более все и так ясно как день.
Парень использует динамический импорт, и при выгрузке библиотеки ничего не деинициализирует кроме хендла самой библиотеки.
И при вызове импортируемых функций не проверяет ссылки на них.


 
Knight ©   (2006-03-14 11:27) [13]

Ладно... буду рэмить всё подряд... хотя и ремить-то собственно ещё нечего... Всем спасибо.


 
Reindeer Moss Eater ©   (2006-03-14 11:34) [14]

>буду рэмить всё подряд

Напиши 2 процедуры: InitLibrary и DeInitLibrary
В первой загрузка и инициализация переменных - указателей на имп. функции
Во второй - выгрузка библиотеки и установка в nil всех переменных - указателей на имп. функции. (Либо сброс глобального флага загруженности библиотеки)

Все вызовы импортируемых функций обертывай проверкой указателя на них  на не nil или проверкой глобального флага.


 
Knight ©   (2006-03-14 11:38) [15]


> [12] Reindeer Moss Eater ©   (14.03.06 11:26)

Нету там ещё ничего кроме хэндла... из dll используется лишь одна функция, но только один раз и то обнуляется сразу после использование там же где подключается...


 
Reindeer Moss Eater ©   (2006-03-14 11:47) [16]

Значит ошибон внутри самой библиотеки.
Она чья?


 
Reindeer Moss Eater ©   (2006-03-14 11:52) [17]

При статическом импорте ошибка есть?
Если есть, то ошибка в библиотеке.
Если нет, то то, что было выше.


 
Knight ©   (2006-03-14 11:52) [18]

Моя... :)
В ней тоже ещё ничего нет, просто скелетная вещь выдающая только одну функцию... вне этого класса работает нормально... ладно, не повторяйтесь, мысль ясна. Вечером перепишу с нуля :)


 
Reindeer Moss Eater ©   (2006-03-14 11:55) [19]

Соглашения о вызовах еще проверь.


 
Игорь Шевченко ©   (2006-03-14 12:02) [20]


> Вечером перепишу с нуля :)


Вечером нас ожидает новая ветка.


 
Харько ©   (2006-03-14 13:02) [21]


> >FLibHandle>32
>
> Где вы такую траву берёте?
>


Я тоже в некоторых проектах (не моих) видел такую проверку. Спрашиваю у разработчиков, что за хрень, говорят, в WinApi16 LoadLibrary возвращала код ошибки, и SUCC было при возврате значения >32


 
Knight ©   (2006-03-14 13:16) [22]


> [21] Харько ©   (14.03.06 13:02)
> и SUCC было при возврате значения >32

А я уж думал, что мне это приснилось... :))
Но вот уточнения про WinApi16 там не было :(


 
Сергей М. ©   (2006-03-14 13:18) [23]


> Knight ©   (14.03.06 09:42)  


Win32Check(FreeLibrary(FLibHandle));
inherited;


 
Knight ©   (2006-03-14 13:18) [24]


> [20] Игорь Шевченко ©   (14.03.06 12:02)
> Вечером нас ожидает новая ветка.

Игорь, давно вы стали флудером? :(


 
Knight ©   (2006-03-15 13:05) [25]

Нашёл проблему... стринг в dll-ке затесался туда где его быть не должно, по-крайней мере без ШарыМем :)


 
Reindeer Moss Eater ©   (2006-03-15 13:08) [26]

Про возможность такой ошибки у постоянного посетителя сайта видимо никто всерьез не подумал


 
Sandman25 ©   (2006-03-15 13:10) [27]

Reindeer Moss Eater ©   (15.03.06 13:08) [26]

Да, переоценили.


 
Странник ©   (2006-03-15 14:00) [28]

Sandman25 ©   (15.03.06 13:10) [27]

или недооценили...


 
Knight ©   (2006-03-15 15:28) [29]

И про старуху бывает.... :)))



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

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

Наверх




Память: 0.53 MB
Время: 0.033 c
15-1142361812
zlib
2006-03-14 21:43
2006.04.09
Алгоритм сжатия


8-1131196465
Toxa_ua
2005-11-05 16:14
2006.04.09
Конус под углом - OpenGL


2-1143039918
Vitalik__
2006-03-22 18:05
2006.04.09
наверное работа с таймером. не уверен


15-1141644636
X9
2006-03-06 14:30
2006.04.09
Новый проект


8-1130982185
Idx
2005-11-03 04:43
2006.04.09
Помогите разрезать TBitmap