Проблема с Automation
От: kpn  
Дата: 27.10.03 21:51
Оценка:
У меня проблема:
Есть 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 сервер.

Кто-нибудь может рассказать в чем дело и как это можно исправить??
Re: Проблема с Automation
От: George Seryakov Россия  
Дата: 27.10.03 22:16
Оценка:
Здравствуйте, 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>Кто-нибудь может рассказать в чем дело и как это можно исправить??


Q176399 пробовали?

Инпрок, поди, успевал в секунду отрабатывать? А нсли не успевает, то таймерные вызовы проверяют проксю на реентрабельность. Которая, видимо, отсутсвует. Подчеркну, прокся, не сервер.
GS
Re[2]: Проблема с Automation
От: kpn  
Дата: 28.10.03 15:22
Оценка:
kpn>>Кто-нибудь может рассказать в чем дело и как это можно исправить??

GS>Q176399 пробовали?

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


GS>Инпрок, поди, успевал в секунду отрабатывать? А нсли не успевает, то таймерные вызовы проверяют проксю на реентрабельность. Которая, видимо, отсутсвует. Подчеркну, прокся, не сервер.


как написано в статье- такая ошибка вызывается для Outproc серверов, т.к используется RPC, для inproc это не актуально.
Re[3]: Проблема с Automation
От: George Seryakov Россия  
Дата: 28.10.03 15:35
Оценка:
Здравствуйте, kpn, Вы писали:

kpn>Кстати, а как искать подобные статьи, т.е имея ошибку искать ответ на нее у микрософта?? Просто у микрософтовского сайта такой интерфейс, что я там ничего уже найти не могу и не знаю как находить.


А MSDN у тебя есть? На диске, установленное с CD. Вот там и ищи. Такой замечательной кнопочкой Search.
GS
Re: Проблема с Automation
От: Mikhail Kozlov Россия  
Дата: 29.10.03 03:41
Оценка:
Здравствуйте, 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 промежуточный объект, а тот уже лезет к серверу.
Re[4]: Проблема с Automation
От: kpn  
Дата: 29.10.03 09:53
Оценка:
Здравствуйте, George Seryakov, Вы писали:

GS>Здравствуйте, kpn, Вы писали:


kpn>>Кстати, а как искать подобные статьи, т.е имея ошибку искать ответ на нее у микрософта?? Просто у микрософтовского сайта такой интерфейс, что я там ничего уже найти не могу и не знаю как находить.


GS>А MSDN у тебя есть? На диске, установленное с CD. Вот там и ищи. Такой замечательной кнопочкой Search.

Понятно! та статейка мне очень даже подошла, и способы решения там описаны.... Спасибо тебе большое!

правда, теперь встает другой вопрос- а как можно сделать сервер так, чтобы каждый из клиентов вовремя получал свои данные и задержки были минимальными??
Re[2]: Проблема с Automation
От: kpn  
Дата: 29.10.03 09:57
Оценка:
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. Кстати, если дашь ссылочку- буду очень благодарен )
Re[3]: Проблема с Automation
От: Mikhail Kozlov Россия  
Дата: 31.10.03 03:02
Оценка:
Здравствуйте, 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. Кстати, если дашь ссылочку- буду очень благодарен )

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/com/htm/aptnthrd_00hf.asp
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.