Re[6]: Работа с RAPI без фактической установки ActiveSync
От: bkat  
Дата: 21.10.04 17:29
Оценка:
Здравствуйте, 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...
}


Прошу прощения что немного сбил с толку...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.