Столкнулся с проблемой.
Код для работы с сокетами прекрасно работает в exe файле, но вызывает сбой при использовании его в COM — объекте (вызывается из VB). (COM на ATL). Причем сбой НЕ происходит при использовании в качестве ОС Windows XP.
Код примитивный — все лишнее убрал.
По таймеру в цикле идет опрос портов.
СAsyncSocket * pAS;
pAS = new CAsyncSocket;
if (!pAS->Create())
{
//
}
else pAS->Connect((LPTSTR)strIP, SEND_PORT);
Никакой специфики, но из ATL/COM не работает :(
Грустно.
Кто-нибудь использовал сокеты из комов? Подскажите, пожалуйста, где могут быть грабли на которые я наступаю.
Здравствуйте Y2K, Вы писали:
Y2K>Столкнулся с проблемой. Y2K>Код для работы с сокетами прекрасно работает в exe файле, но вызывает сбой при использовании его в COM — объекте (вызывается из VB). (COM на ATL). Причем сбой НЕ происходит при использовании в качестве ОС Windows XP. Y2K>Код примитивный — все лишнее убрал.
Y2K>По таймеру в цикле идет опрос портов.
Y2K>СAsyncSocket * pAS; Y2K>pAS = new CAsyncSocket;
Y2K>if (!pAS->Create()) Y2K>{ Y2K> // Y2K>} Y2K>else Y2K> pAS->Connect((LPTSTR)strIP, SEND_PORT);
Y2K>Никакой специфики, но из ATL/COM не работает :(
Y2K>Грустно.
Y2K>Кто-нибудь использовал сокеты из комов? Подскажите, пожалуйста, где могут быть грабли на которые я наступаю.
а вызывается ли перед этим WSAStartup или AfxSocketInit ?
Здравствуйте Y2K, Вы писали:
Y2K>Здравствуйте VVV, Вы писали:
VVV>>а вызывается ли перед этим WSAStartup или AfxSocketInit ? Y2K>Вызываю AfxSocketInit в InitInstance приложения.
Приложения или ATL-компонента?
Здравствуйте VladD2, Вы писали:
VD>А какая потоковая модель у COM-объекта?
Потоковая модель Apartment.
я тут продолжил эксперименты. Как я говорил тот код, который я приводил в вопросе, выполняется по таймеру. Таймер был внутри ком-объекта. Вылетание происходило случайным образом, но не позже пятого срабатывания таймера (таймер срабатывает раз в 5 с).
теперь я изменил схему. Таймер вынес в клиентское приложение. При таком подходе вылетание происходит, но гораздо реже. После 2 или 3 минут работы. Самый косяк, что при попытке отладить этот кусок кода под W2K, отладчик предлагает покопаться в ассемблерном коде. Под Win XP отладчик работает нормально, но там и ошибка не происходит.
Вокруг одни косяки :(