|
225 / 39 / 4
Регистрация: 18.11.2012
Сообщений: 1,633
|
||||||||||||||||
Петзольд. Тема DDE-(Dynamic Data Exchange)03.11.2023, 16:35. Показов 10272. Ответов 93
Здравствуйте! Не хочет работать программа из книги Петзольда. Тема, Dynamic Data Exchange, если честно, то саму тему не понял, соответственно, и ошибку найти не могу. Вот код:
Когда запускаю клиента, то бывает, что одно значение, численность штата меняется, а следом ошибка Failure on WM_DDE_ADVISE!, не знаю в чём дело. Тут нужно выложит ещё и файлы ресурсов, но тогда когда будет совсем уж много, возможно, что кто-нибудь в теме разбирается и поможет, код то простой, если понимаешь что к чему, но если нужно выложу все файлы. DDEPOP1 - Это сервер. SHOWPOP1 - Это клиент. DDEPOP1
SHOWPOP1
В этом участке кода ошибка: Кликните здесь для просмотра всего текста
0
|
||||||||||||||||
| 03.11.2023, 16:35 | |
|
Ответы с готовыми решениями:
93
Чем заменить Dynamic Data Exchange (DDE) из VB6 научите пользоваться Dynamic Data Display Отображение графика в Dynamic Data Display |
|
Модератор
|
||||
| 17.11.2023, 09:04 | ||||
|
Не по теме:
Картинка попытки использования DDE из соцсети microsoft Добавлено через 1 час 15 минут Это зачем в сервере? CF_TEXT.Диагностические сообщения можно сохранять в файл, лог отладчика( OutputDebugString()), журнал или присоединить windows console и писать туда.
0
|
||||
|
225 / 39 / 4
Регистрация: 18.11.2012
Сообщений: 1,633
|
||
| 17.11.2023, 15:30 [ТС] | ||
0
|
||
|
225 / 39 / 4
Регистрация: 18.11.2012
Сообщений: 1,633
|
|||||||
| 18.11.2023, 11:44 [ТС] | |||||||
|
В сообщении WM_DDE_ACK нужно определить вовремя ли пришло сообщение, попадает ли оно во временной интервал, если да, то проверить поле fAck структуры DDEACK, если ложь, то оповестить пользователя о том, что что-то пошло не так, если fAck истинно, то тут..., в WM_USER_INITIATE, если поле fAck истинно, то в этом сообщении вызывается в цикле PeekMessage с целью выявить сообщения DDE из диапазона, следом за подтверждением DDEACK должно прийти сообщение WM_DDE_DATA, так что его и ждёт это цикл, я так думаю, соответственно, если цикл задержки и обработки структуры DDEACK убран, то и этот цикл так же оттуда удалён, нужен ли он здесь вообще?
0
|
|||||||
|
Модератор
|
|||||
| 18.11.2023, 21:47 | |||||
|
Добавлено через 2 часа 34 минуты WndProc(), вызывается DispatchMessage(), который, в свою очередь, вызывает WndProc() для обработки сообщений единственного окна приложения-клиента. В рекурсивном вызове WndProc() нет ничего необычного, но здесь в этом нет необходимости. Он был нужен, потому что сервер мог ждать обработки сообщений, поставленных в очередь клиента, до завершения обработчика WM_USER_INITIATE, который в примере вызывается до начала основного цикла сообщений:
1
|
|||||
|
Модератор
|
||
| 18.11.2023, 22:05 | ||
|
Поставить себе напоминалку на DDE_TIMEOUT и уйти пить кофе: обрабатывать в основном цикле текущие сообщения, и регистрировать приходящие в очередь WM_DDE_ACK от сервера, управляя ресурсами так, как это описано в документации DDE. По истечении DDE_TIMEOUT проверить, если ли запросы, на которые ещё не поступили подтверждения от сервера.Если пользователь сможет в любой момент добавлять и управлять DDE-ссылками на внешние данные, то, конечно, отслеживать состояние ссылок и в целом "бесед"( conversation) с серверами нужно будет отдельно для каждой ссылки.
1
|
||
|
225 / 39 / 4
Регистрация: 18.11.2012
Сообщений: 1,633
|
|||||||
| 19.11.2023, 11:05 [ТС] | |||||||
|
Кликните здесь для просмотра всего текста
0
|
|||||||
|
Модератор
|
|||||||
| 19.11.2023, 21:41 | |||||||
//ERROR MESSAGE дело не дойдёт, если после dwTime + DDE_TIMEOUT так и не придёт ни одного WM_DDE_ACK.Регистрация сообщений должна работать. Если хотите обрабатывать сообщения вне WndProc(), нужно проверять, кому (и от кого) сообщение. Для WM_DDE_ACK нужно анализировать статус, так как сообщение может быть и отказом.Регистрацию подтверждений подписки можно также перенести в обработчик WM_DDE_ACK в WndProc()
0
|
|||||||
|
Отпрыск ChatGPT
266 / 31 / 4
Регистрация: 18.06.2019
Сообщений: 155
|
|
| 20.11.2023, 00:04 | |
|
DDE в 2023 (эмодзи черепа)
Добавлено через 2 минуты Вон в ссылке повыше в теме Реймонд Чен сказал, дде всё с 1997. Добавлено через 1 минуту Вы некромант?
0
|
|
|
225 / 39 / 4
Регистрация: 18.11.2012
Сообщений: 1,633
|
|||||||||||
| 20.11.2023, 00:31 [ТС] | |||||||||||
0
|
|||||||||||
|
Модератор
|
||||||||||||||||||||||||||||
| 20.11.2023, 08:47 | ||||||||||||||||||||||||||||
Если, например, из GetMessage() вообще не придёт ни одного WM_DDE_ACK, то это никогда не выполнится:
Если, например, из GetMessage() вообще не придёт ни одного WM_DDE_ACK, то это никогда не выполнится:
TRUE==InSendMessage() внутри WndProc() означает, что обрабатывается сообщение "вне очереди" из других потоков( и процессов), отправленное с помощью SendMessage()https://learn.microsoft.com/ru... endmessage
0
|
||||||||||||||||||||||||||||
|
225 / 39 / 4
Регистрация: 18.11.2012
Сообщений: 1,633
|
|||||||||||||
| 20.11.2023, 13:40 [ТС] | |||||||||||||
0
|
|||||||||||||
|
Модератор
|
|||||||
| 20.11.2023, 14:02 | |||||||
WndProc(), где уже проверены все условияФрагмент обработчика WM_DDE_ACK в WndProc():
dwCountOfMessagesDdeAck
0
|
|||||||
|
225 / 39 / 4
Регистрация: 18.11.2012
Сообщений: 1,633
|
||||||||
| 20.11.2023, 15:39 [ТС] | ||||||||
|
Что за условие такое мудрёное оно не противоречит само себе.
А что с другими сообщениями в которых так же требуется задержка, например, WM_CLOSE? Хотя не совсем понятно зачем там нужна задержка, если время задержки истечёт или сообщение придёт, не важно, результат тот же.
0
|
||||||||
|
Модератор
|
|||||||
| 20.11.2023, 15:50 | |||||||
|
Должно быть
0
|
|||||||
|
225 / 39 / 4
Регистрация: 18.11.2012
Сообщений: 1,633
|
|
| 20.11.2023, 16:08 [ТС] | |
|
В приложении сервере тоже самое нужно проделать WM_DDE_ACK через основной цикл сообщений получать?
0
|
|
|
Модератор
|
|
| 20.11.2023, 19:07 | |
|
Да, надо как-то избежать блокирования, если клиент попросил в
pDdeAdvise->fAckReq отправлять данные с подтверждением. В сервере уже есть таймер, можно сделать его почаще и проверять, не истёк ли срок ожидания WWW_DDE_ACK от клиента в ответ на WM_DDE_DATA.И убрать MessageBox'ы из ServerProc()
0
|
|
|
225 / 39 / 4
Регистрация: 18.11.2012
Сообщений: 1,633
|
|||
| 21.11.2023, 09:53 [ТС] | |||
|
0
|
|||
|
Модератор
|
|||
| 21.11.2023, 11:12 | |||
PostMessage(). А на какое ещё сообщение клиент может ответить серверу PostMessage() WM_DDE_ACK?https://learn.microsoft.com/ru... wm-dde-ack Если атом именно тот, для которого мы ждали подтверждения приёма данных, и ACK не отрицательный, то выполняем GlobalFree(), если это необходимо, и считаем, что клиент готов принимать новые данные.https://learn.microsoft.com/ru... m-dde-data
0
|
|||
|
225 / 39 / 4
Регистрация: 18.11.2012
Сообщений: 1,633
|
||||
| 21.11.2023, 12:24 [ТС] | ||||
|
В данном случае я не знаю, как это реализовать, это, видимо, нужно переписать всю функцию ServerProc, думаю, вызовы функции PostDataMessage нужно убрать из сообщения WM_DDE_ADVISE, иначе, как организовать задержку отправки сообщения WM_DDE_DATA. Затем в сообщении WM_DDE_ACK, если проверка атома и флага fAck структуры DDEACK даст положительный результат, вызвать PostDataMessage, но тогда на что клиент должен отвечать, если данные ему не были отправлены из сообщения WM_DDE_ADVISE.... ну и так далее.
0
|
||||
| 21.11.2023, 12:24 | |
|
Нужны примеры по Dynamic Data Display Как нарисовать график в Dynamic Data Display не поддерживается тип контекста в Dynamic Data на VS2012 Нужен дистрибутив Active Reports Data Dynamic [WPF] Dynamic Data Display и Множество коллекций Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы
## О чём эта статья
В процессе построения ОДУ-модели (система дифференциальных. . .
|
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет)
Содержание проекта
Симуляция вековой (50 лет) экологической сукцессии в почве леса
Основные участники: АМ-гриб, ЭКМ-гриб,. . .
|
сукцессия 23. Более физиологичная физиология, более экологичная экология, более диффурные диффуры.
anaschu 12.07.2026
Что реально нашли и починили за эти 5 часов
Правило Линдемана (КПД конверсии сахара в тело, kEff) — раньше 100% полученного углерода шло прямо в биомассу гриба; теперь только kEff=0. 5 (после. . .
|
сукцессия 22. От артефактов к физиологии: калибровка агентной модели грибной сукцессии для воспроизведения сезонной динамики и pH-плато
anaschu 11.07.2026
Аннотация
В данной работе представлена калибровка агентной модели динамики грибных сообществ (fungal-succession), направленная на устранение нефизичных артефактов (коллапс биомассы, мгновенное. . .
|
|
Сукцессия 20. Война автоботов. Делаем ставки. Лёд против "пш-пш!".
anaschu 11.07.2026
Битва ИИ в ризосфере: Как мы скрестили жесткие ОДУ, закон Фика и «подземный шантаж»
Уважаемые коллеги!
Хочу поделиться уникальным опытом ведения междисциплинарной компьютерной разработки. Прямо. . .
|
Сукцессия 19. Какие выводы я сделал из модели? Часть 2.Внутримикоризный стехиометрический буфер и хроно-дискретные зоны экспансии
anaschu 11.07.2026
Био-Инженерный Ликбез: Архитектура Модели Ризосферы
Математический аппарат моделирования
|
Сукцессия 18. Какие выводы я сделал из войны грибов с деревьями? Часть 1- рассказ и немного про термины
anaschu 11.07.2026
Био-Инженерный Ликбез: Архитектура Модели Ризосферы
Математический аппарат моделирования
Система ОДУ описывает динамику изменения массы различных компонентов системы во времени. Ключевой. . .
|
Просветление в 5 секунд
kumehtar 10.07.2026
Андрей Веретенников выдал фразу недавно: "Вам не обязательно кем-то себя считать"
|