Здравствуйте, Kalinich, Вы писали:
B>>>Для этих целей лучше пользовать CeRapiInitEx, который позволяет выставлять тайм аут
B>>>и не ждать до конца света...
K>>Если я не ошибаюсь CeRapiInitEx отличается только тем, что возвращает указатель на структуры типа RAPIINIT, как же ей передать таймер?
K>>//
K>>HRESULT CeRapiInitEx(
K>>RAPIINIT *pRapiInit
K>>);
K>>//
K>>typedef struct _RAPIINIT {
K>>DWORD cbSize;
K>>HANDLE heRapiInit;
K>>HRESULT hrRapiInit;
K>>} RAPIINIT;
K>>//
K>>Я не исключаю, что чего-то не понял и даже буду рад, если это так (куда таймер-то пихать)
K>Да, я понял, что немного неправильно все понял, вернее не совсем четко была сформулирована вот эта фраза "Для этих целей лучше пользовать CeRapiInitEx, который позволяет выставлять тайм аут"...
K>Речь идет наверное о MsgWaitForMultipleObjects, для которого и нужен HANDLE heRapiInit, который в свою очередь возвращает CeRapiInitEx...
K>Теперь я правильно понял?
Не совсем...
Структуру типа RAPIINIT ты должен сам подготовить.
В ней есть хендл "евента", который позволяет тебе ждать столько сколько тебе нужно
с помощью WaitForSingleObject.
и вв результате ты либо выйдешь по тайм ауту из-за того, что нету коннекта,
либо RAPI выставит твой "евент"
Грубо примерно так:
DWORD timeout=5000; // ждем максимум 5 сек
RAPIINIT rapiInitData = {sizeof(RAPIINIT), 0, 0};
rapiInitData.heRapiInit = CreateEvent(NULL, FALSE, FALSE, NULL);
ResetEvent(m_rapiInitData.heRapiInit);
HRESULT hRes = CeRapiInitEx(&rapiInitData);
if (S_OK == hRes)
{
DWORD dwWaitResult = WaitForSingleObject(m_rapiInitData.heRapiInit, timeout);
if (dwWaitResult==WAIT_OBJECT_0)
{
// есть коннект
}
else
{
// нет коннекта
}
}
else
{
//... проблемы с RAPI, скорей всего нету ActiveSync...
}
Прошу прощения что немного сбил с толку...