|
0 / 0 / 1
Регистрация: 12.08.2013
Сообщений: 23
|
||||||||||||||||||||||||||
Не работает Synchronize() в DLL при сборке без рантайм библиотек31.08.2017, 13:41. Показов 1704. Ответов 11
Метки нет (Все метки)
Добрый день. Есть библиотека, в ней есть поток TThread. Библиотека должна использоваться на компьютере без IDE. Когда библиотека собирается с выставленными галочками Link with runtime packages и Link with dynamic RTL, всё работает хорошо. Убираю галочки - программа виснет на методе Synchronize, не вызывая полученную функцию. Код:
NetThread.h Кликните здесь для просмотра всего текста
Network.cpp Кликните здесь для просмотра всего текста
Создание потока:
0
|
||||||||||||||||||||||||||
| 31.08.2017, 13:41 | |
|
Ответы с готовыми решениями:
11
включение библиотек при сборке
Возникают ошибки при сборке dll qwt |
|
|
||
| 31.08.2017, 13:51 | ||
|
Сам идея дохлая. Начиная с использование экспорта классов из DLL. И заканчивая Synchronize в dll в котором нет основного потока gui с которым нужно синхронизироваться. Я уже не говорю - нафига оно вообще сдалось пихать в dll
0
|
||
|
0 / 0 / 1
Регистрация: 12.08.2013
Сообщений: 23
|
|
| 31.08.2017, 14:03 [ТС] | |
|
Класс не экспортируется из DLL. Экспортируются OMSConnect и StartFlow. Коннект возвращает хэндл на поток, СтартФлоу принимает хэндл и запускает по этому адресу поток. Может это неправильно...
GUI есть, оно вызывает экспортные функции, и передает в DLL коллбэки на свои функции. Получается, GUI и DLL работают в одном потоке, но в DLL есть второй поток, который и должен синхронизоваться с потоком GUI. Как лучше сделать?
0
|
|
|
0 / 0 / 1
Регистрация: 12.08.2013
Сообщений: 23
|
||||||
| 31.08.2017, 14:10 [ТС] | ||||||
|
Код GUI:
Кликните здесь для просмотра всего текста
0
|
||||||
|
|
|||
| 31.08.2017, 14:20 | |||
Сообщение было отмечено romasv как решение
Решение2. Не использовать Synchronize. 3. Не использовать стат линковку. итд... Если приложения - читайте что я написал выше, поток в dll ничего не знает о вашем приложении. В динамике оно работает лишь по тому что грузятся одни и те же библиотеки и используются совместно (глобальные объекты, менеджер памяти идр вещи скрытые от глаз.) Добавлено через 6 минут В обще это мутная тема где все не очевидно и непонятно. Можете почитать: Создать DLL, которая создаст кнопку на форме
1
|
|||
|
0 / 0 / 1
Регистрация: 12.08.2013
Сообщений: 23
|
||
| 31.08.2017, 15:42 [ТС] | ||
|
Хм, довольно интересно всё расписали, спасибо!
В DLL заказчик просил запихать... Dll должна принимать запросы с gui-программки, и принимать udp-поток данных. То, что она приняла, она должна пихнуть обратно в gui. Заказчику видимо лень писать свой поток. Добавлено через 1 час 0 минут И спасибо за советы! В общем, убрал Synchronize, теперь вызываю метод напрямую. Всё работает, и никак не глючит... Не понимаю, почему, ведь какой-то совершенно левый поток что-то меняет в другой программе, да ещё и на форме, и ему это прекрасно удается! Магия...
0
|
||
|
0 / 0 / 1
Регистрация: 12.08.2013
Сообщений: 23
|
||||||
| 31.08.2017, 16:08 [ТС] | ||||||
|
Да, без синхронизации...
0
|
||||||
|
0 / 0 / 1
Регистрация: 12.08.2013
Сообщений: 23
|
|
| 01.09.2017, 08:30 [ТС] | |
|
Тогда какой выход? Использовать WINAPI-поток? Насколько безопасно будет в нем использовать TIdUDPClient? И как быть с синхронизацией?
0
|
|
|
|
||
| 01.09.2017, 10:15 | ||
|
Но как я сказал лучше отказаться от такой затеи вовсе или же ликоваться динамически.
0
|
||
| 01.09.2017, 10:15 | |
|
Помогаю со студенческими работами здесь
12
Почему при сборке Releas'а прога без VC++ не идёт? Не работает Synchronize в TThread
При сборке работает только полпроекта Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2.
Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
|
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
|
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
|
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2.
Данный документ берёт данные из другого нетипового документа. . .
|
|
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
|
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: реализовать программный контроль на предмет проведения документа. . .
|
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача:
1. Реализовать контроль заполнения реквизита. . .
|
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение:
DISM / Online / Add-Capability / CapabilityName:WMIC~~~~
Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
|