purebasic.info

PureBasic forum
Текущее время: Вс окт 21, 2018 4:53 am

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 17 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: PB 5.11 - Баг с ProcedureDLL и Window
СообщениеДобавлено: Чт июн 06, 2013 8:28 am 
Не в сети
док
Аватар пользователя

Зарегистрирован: Вс янв 10, 2010 1:10 pm
Сообщений: 126
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Обнаружил один очень неприятный баг в PureBasic 5.11 (x86).
Если в DLL библиотеке использовать функции работы с окнами (даже в тех ProcedureDLL, которые в программе и не вызываются), то при использовании окон в основном приложении будут ошибки доступа к памяти.
Изображение
Протестируйте код в приложенном архиве, у вас так же? И какая из последних версий компилятора лишена этой ошибки?


Вложения:
memory_error.jpg [84.68 KiB]
Скачиваний: 1
dll_bug.zip [12.32 KiB]
Скачиваний: 143

_________________
.
Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт июн 06, 2013 9:08 am 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6384
Благодарил (а): 20 раз.
Поблагодарили: 198 раз.
Пункты репутации: 48
Explode писал(а):
будут ошибки доступа к памяти.

Это не баг, а твоя ошибка. WaitWindowEvent() в программе может быть только один. А у тебя и в DLL и в программе.

_________________
read-only


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт июн 06, 2013 9:22 am 
Не в сети
док
Аватар пользователя

Зарегистрирован: Вс янв 10, 2010 1:10 pm
Сообщений: 126
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
kvitaliy писал(а):
Это не баг, а твоя ошибка. WaitWindowEvent() в программе может быть только один. А у тебя и в DLL и в программе.

А ничего, что DLL'ки запускаются в отдельном потоке и могут иметь собственные обработчики событий? К тому же, посмотрите прикрепленные файлы.


Вложения:
memory_error_2.jpg [69.59 KiB]
Скачиваний: 6
memory_error.jpg [85.21 KiB]
Скачиваний: 2

_________________
.
Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт июн 06, 2013 10:13 am 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6384
Благодарил (а): 20 раз.
Поблагодарили: 198 раз.
Пункты репутации: 48
Ну да работать то работает. Но только основная программа не может обрабатывать свои евенты, т.к. их перехватывает то окно, что в DLL. Нет смысла иметь 2 разных евента и потоки выполнения тут не причем.

В v5.01 компилирует без ошибок. Но смысла нет в такой работе, можешь попробовать


Вложения:
Dll proba.zip [21.65 KiB]
Скачиваний: 146

_________________
read-only


Последний раз редактировалось kvitaliy Чт июн 06, 2013 11:57 am, всего редактировалось 1 раз.
Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт июн 06, 2013 11:18 am 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11300
Благодарил (а): 4 раз.
Поблагодарили: 436 раз.
kvitaliy писал(а):
Это не баг
Нет, это баг. http://www.purebasic.fr/english/viewtop ... =4&t=54536

kvitaliy писал(а):
В v5.1 компилирует без ошибок.
Оно-то компилирует в 5.1, но если запустить прогу, то после закрытия окна из dll, прога падает на строке с открытием окна в проге.
В 4.61 работает нормально.

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт июн 06, 2013 11:29 am 
Не в сети
PureBasic Coder
Аватар пользователя

Зарегистрирован: Чт ноя 10, 2011 10:50 am
Сообщений: 4049
Откуда: Ростов-на-Дону
Благодарил (а): 70 раз.
Поблагодарили: 81 раз.
Пункты репутации: 24
Пётр, а если dll скомпилировать в 4.61, а вызывать функцию в 5.1, то тоже ошибка?

_________________
Пурик - лучший язык программирования


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт июн 06, 2013 11:37 am 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11300
Благодарил (а): 4 раз.
Поблагодарили: 436 раз.
Нет. Ошибка будет если dll компилить в 5.11.

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт июн 06, 2013 11:49 am 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6384
Благодарил (а): 20 раз.
Поблагодарили: 198 раз.
Пункты репутации: 48
Пётр писал(а):
прога падает на строке с открытием окна в проге.

У меня же не падает.
Только не 5.1, v 5.01.

_________________
read-only


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт июн 06, 2013 11:58 am 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11300
Благодарил (а): 4 раз.
Поблагодарили: 436 раз.
kvitaliy писал(а):
У меня же не падает.
А у меня падает. Уже писал.

kvitaliy писал(а):
Только не 5.1, v 5.01.
?? :shock: :shock:
5.1 это 5.1x (5.10 и 5.11), а 5.01 вообще не существует.

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт июн 06, 2013 12:11 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6384
Благодарил (а): 20 раз.
Поблагодарили: 198 раз.
Пункты репутации: 48
Пётр писал(а):
А у меня падает.

у тебя падает потому, что ты закрываешь библиотеку сразу после открытия её вызова. А это очищает всю память, связанную с библиотекой.
Попробуй не закрывать и у тебя всё получится. И даже в v5.11

_________________
read-only


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт июн 06, 2013 12:29 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11300
Благодарил (а): 4 раз.
Поблагодарили: 436 раз.
kvitaliy писал(а):
у тебя падает потому, что ты закрываешь библиотеку сразу после открытия её вызова
Виталйи посмотри в пошаловой отладке как исполняется программа.
Тогда ты увидишь что библиотека закрывается после завершения вызова ее функции.

kvitaliy писал(а):
А это очищает всю память, связанную с библиотекой.
Ну и?
Программа ведь не использует память из библиотеки. Тогда какие могут быть проблемы?
Почему же если библиотеку собрать в 4.61, то проблем нет?

kvitaliy писал(а):
Попробуй не закрывать и у тебя всё получится.
То есть считваешь нормальный держать в памяти библиотеки, которые больше не нужны для работы программы?

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт июн 06, 2013 12:44 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6384
Благодарил (а): 20 раз.
Поблагодарили: 198 раз.
Пункты репутации: 48
Пётр писал(а):
Почему же если библиотеку собрать в 4.61, то проблем нет?

Ну на этот вопрос тебе даже Фред не ответил, а что же ты от меня хочешь? Или он знает, но просто с пиратами не разговаривает? :lol:

Я просто даю способ выхода из положения особо страждущим новизны ( v.5.11) . Сам я использую версию Пурика 5.00 и таких проблем не имею.

_________________
read-only


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт июн 06, 2013 2:41 pm 
Не в сети
PureBasic Coder
Аватар пользователя

Зарегистрирован: Чт ноя 10, 2011 10:50 am
Сообщений: 4049
Откуда: Ростов-на-Дону
Благодарил (а): 70 раз.
Поблагодарили: 81 раз.
Пункты репутации: 24
Фред сказал, что пофиксили

_________________
Пурик - лучший язык программирования


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт июн 06, 2013 2:56 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11300
Благодарил (а): 4 раз.
Поблагодарили: 436 раз.
kvitaliy писал(а):
Ну на этот вопрос тебе даже Фред не ответил, а что же ты от меня хочешь?
От тебя ничего не хочу, но ты утверждаешь что это не баг. Тогда что?

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт июн 06, 2013 4:44 pm 
Не в сети
док
Аватар пользователя

Зарегистрирован: Вс янв 10, 2010 1:10 pm
Сообщений: 126
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
kvitaliy писал(а):
у тебя падает потому, что ты закрываешь библиотеку сразу после открытия её вызова. А это очищает всю память, связанную с библиотекой.
Попробуй не закрывать и у тебя всё получится. И даже в v5.11

Я собственно наткнулся на этот баг при разработке одной программы. Если не закрывать библиотеку, то все нормально до закрытия одного из окон (либо в основной программе, либо в dll). Тогда опять вываливается ошибка доступа к памяти, и это даже при том, если закрывать только окно основной программы, а функции в dll даже не вызывать.

_________________
.


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 17 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB