Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2006.04.09;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.51 MB
Время: 0.011 c
6-1135287504
Rouse_
2005-12-23 00:38
2006.04.09
10022 ошибка... Забавно.


1-1141889194
sapsi
2006-03-09 10:26
2006.04.09
получить название ссылки в вебраузере


2-1143303177
Farpik
2006-03-25 19:12
2006.04.09
Небольшие вопросики!


2-1143356756
VadimSpb
2006-03-26 11:05
2006.04.09
Подключение к MSSQL 2005 по сети


6-1135458339
FH
2005-12-25 00:05
2006.04.09
Плагин к миранде





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский