Проблемы Com & Multithreading

  • Автор темы -=Bright=-
  • Дата начала
Статус
Закрыто для дальнейших ответов.
B

-=Bright=-

#1
Здравствуйте!
У меня следующая проблема: не могу подключиться к COM-серверу, если использую многопоточность.
Упрощенно структура программы имеет такой вид:
class CTerminalApp : public CWinApp
{
private:
CForexServer server; // COM-сервер
}

Подключаемся к серверу:
void CTerminalApp::OnLogindlg()
{
bool bSuccess=false;
CLSID clsid;
if (SUCCEEDED (CLSIDFromProgID (OLESTR ("ForexServer.Application"), &clsid)))
{
IUnknown* pUnknown;
if (SUCCEEDED :):GetActiveObject(clsid, NULL, &pUnknown)))
{
IDispatch* pDispatch;
if (SUCCEEDED (pUnknown->QueryInterface (IID_IDispatch, (void**) &pDispatch)))
{
pDispatch->Release();
server.AttachDispatch(pDispatch);
bSuccess=true;
}
}
}

if (!bSuccess)
if (!server.CreateDispatch(_T ("ForexServer.Application")))
{
MessageBox(m_pMainWnd->m_hWnd,"Could not connect to the server! Please check connection and try again.","ERROR",MB_OK);
return;
}
}

По таймеру,запускаем новый поток, чтобы забрать с сервера новые данные:
void CALLBACK EXPORT TimerProc(HWND hWnd, UINT nMsg, UINT nIDEvent, DWORD dwTime)
{
theApp.GetCurrentPrices();
AfxBeginThread(CurrentPrices,&theApp);

return;
}

UINT CurrentPrices(LPVOID pParam)
{
CTerminalApp *serv=(CTerminalApp*) pParam;
serv->GetCurrentPrices();
return 0;
}

При попытке выполнения метода CForexServer::GetCurrentPrices() программа выдает ошибку, даже если внутри самой функции CurrentPrices попытаться заново подключиться к серверу.
Помогите пожалуйста кто знает в чем проблема!
Заранее благодарен!
 
Статус
Закрыто для дальнейших ответов.