У меня проблема:
Есть 2 программы 1- сервер, написанная на Visual C++. Содержит внутри Singleton-Объект, который занимается тем, что считывает данные из порта Вводв-Вывода и записывает их во внутренний буфер.
Вторая- клиент на Visual Basic-е, который занимается тем, что подключается к серверу через Automation и считывает данные из внутреннего буфера сервера. Опросы происходят раз в секунду.
Очень редко появляется ошибка "Run-time error '-2147418107 (80010005)' Automation Error".
По данному коду существует такое описание ошибки "It is illegal to call out while inside message filter"
Раньше именно с этой прогой, написанной на Visual Basic-е очень хорошо и без ошибок работал Inproc сервер.
Кто-нибудь может рассказать в чем дело и как это можно исправить??
Здравствуйте, kpn, Вы писали:
kpn>Есть 2 программы 1- сервер, написанная на Visual C++. Содержит внутри Singleton-Объект, который занимается тем, что считывает данные из порта Вводв-Вывода и записывает их во внутренний буфер. kpn>Вторая- клиент на Visual Basic-е, который занимается тем, что подключается к серверу через Automation и считывает данные из внутреннего буфера сервера. Опросы происходят раз в секунду. kpn>Очень редко появляется ошибка "Run-time error '-2147418107 (80010005)' Automation Error". kpn>По данному коду существует такое описание ошибки "It is illegal to call out while inside message filter"
kpn>Раньше именно с этой прогой, написанной на Visual Basic-е очень хорошо и без ошибок работал Inproc сервер.
kpn>Кто-нибудь может рассказать в чем дело и как это можно исправить??
Инпрок, поди, успевал в секунду отрабатывать? А нсли не успевает, то таймерные вызовы проверяют проксю на реентрабельность. Которая, видимо, отсутсвует. Подчеркну, прокся, не сервер.
kpn>>Кто-нибудь может рассказать в чем дело и как это можно исправить??
GS>Q176399 пробовали?
нет, не пробовал, но статья очень хорошая! сейчас попробую.
Кстати, а как искать подобные статьи, т.е имея ошибку искать ответ на нее у микрософта?? Просто у микрософтовского сайта такой интерфейс, что я там ничего уже найти не могу и не знаю как находить.
GS>Инпрок, поди, успевал в секунду отрабатывать? А нсли не успевает, то таймерные вызовы проверяют проксю на реентрабельность. Которая, видимо, отсутсвует. Подчеркну, прокся, не сервер.
как написано в статье- такая ошибка вызывается для Outproc серверов, т.к используется RPC, для inproc это не актуально.
Здравствуйте, kpn, Вы писали:
kpn>Кстати, а как искать подобные статьи, т.е имея ошибку искать ответ на нее у микрософта?? Просто у микрософтовского сайта такой интерфейс, что я там ничего уже найти не могу и не знаю как находить.
А MSDN у тебя есть? На диске, установленное с CD. Вот там и ищи. Такой замечательной кнопочкой Search.
Здравствуйте, kpn, Вы писали:
kpn>У меня проблема: kpn>Есть 2 программы 1- сервер, написанная на Visual C++. Содержит внутри Singleton-Объект, который занимается тем, что считывает данные из порта Вводв-Вывода и записывает их во внутренний буфер. kpn>Вторая- клиент на Visual Basic-е, который занимается тем, что подключается к серверу через Automation и считывает данные из внутреннего буфера сервера. Опросы происходят раз в секунду. kpn>Очень редко появляется ошибка "Run-time error '-2147418107 (80010005)' Automation Error". kpn>По данному коду существует такое описание ошибки "It is illegal to call out while inside message filter"
Такую ошибку я убрал сделав промежуточный FreeThreaded COM объект, для FreeThreaded не создается message filter.
Таким образом клиент создает inproc промежуточный объект, а тот уже лезет к серверу.
Здравствуйте, George Seryakov, Вы писали:
GS>Здравствуйте, kpn, Вы писали:
kpn>>Кстати, а как искать подобные статьи, т.е имея ошибку искать ответ на нее у микрософта?? Просто у микрософтовского сайта такой интерфейс, что я там ничего уже найти не могу и не знаю как находить.
GS>А MSDN у тебя есть? На диске, установленное с CD. Вот там и ищи. Такой замечательной кнопочкой Search.
Понятно! та статейка мне очень даже подошла, и способы решения там описаны.... Спасибо тебе большое!
правда, теперь встает другой вопрос- а как можно сделать сервер так, чтобы каждый из клиентов вовремя получал свои данные и задержки были минимальными??
kpn>>Очень редко появляется ошибка "Run-time error '-2147418107 (80010005)' Automation Error". kpn>>По данному коду существует такое описание ошибки "It is illegal to call out while inside message filter"
MK>Такую ошибку я убрал сделав промежуточный FreeThreaded COM объект, для FreeThreaded не создается message filter. MK>Таким образом клиент создает inproc промежуточный объект, а тот уже лезет к серверу.
спасибо за предложение, оно очень интересное!
попробую почитать что такое FreeThreaded. Кстати, если дашь ссылочку- буду очень благодарен )
Здравствуйте, kpn, Вы писали:
kpn>>>Очень редко появляется ошибка "Run-time error '-2147418107 (80010005)' Automation Error". kpn>>>По данному коду существует такое описание ошибки "It is illegal to call out while inside message filter"
MK>>Такую ошибку я убрал сделав промежуточный FreeThreaded COM объект, для FreeThreaded не создается message filter. MK>>Таким образом клиент создает inproc промежуточный объект, а тот уже лезет к серверу.
kpn>спасибо за предложение, оно очень интересное! kpn>попробую почитать что такое FreeThreaded. Кстати, если дашь ссылочку- буду очень благодарен )