Привет, all! Интересный вопрос: как посылать события COM из отдельного потока используя ATL на BCB?
Вообще-то тема 3-х топиков сразу получается

, все будет ясно на примере
Пример следующий: создаем Application на BCB, создаем там COM сервер в EXE + добавляем в мастере или руками поддержку Event'ов. Получается следующий код:
// КОД 1
STDMETHODIMP TTestImpl::start(long lValue)
{
pImpl->Fire_onStart(lValue);
return S_OK;
}
Набрасываем клиент, по быстренькому в Excel
// КОД 2
Dim WithEvents obj As Test
Sub obj_onStart(ByVal s As Long)
Call MsgBox("Yes!")
End Sub
Sub ss()
Set obj = CreateObject("tstLib.Test")
Call obj.Start(4)
Set obj = Nothing
End Sub
Все чудесно работает, есс-но, но если мы изменяем Код 2 на
DWORD WINAPI thr(LPVOID pObject)
{
TTestImpl * pImpl=reinterpret_cast<TTestImpl * >(pObject);
pImpl->Fire_onStart(11); // неважно, влом передавать еще один параметр
return 0;
}
STDMETHODIMP TTestImpl::start(long str)
{
HANDLE hThread=CreateThread(NULL,0,thr,this,0,0);
WaitForSingleObject(hThread,INFINITE); // просто для примера
CloseHandle(hThread);
return S_OK;
}
события не вызываются! из-за чего? просветите, плз, как этого достичь...