Translate.c++

Разговоры на любые темы: вы можете обсудить здесь какой-либо сайт, найти единомышленников или просто пообщаться...
Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Translate.c++

Сообщение Antonariy » 11.12.2006 (Пн) 11:34

Это кусок библы, инициализирующей и мониторящей TAPI (будь оно проклято!!). Трейсер, сделанный на ее основе прекрасно работает, а весь мой код на vb6 - нет :cry: Конечно, на вб у меня из-за потоков не полный аналог, но принцип тот же. Но не работает. Помогите перетащить этот код под vb.net. Мне здесь не понятен механизм создания потока и откуда в строчке m_hTapiEvent_L = lip.Handles.hEvent; взялось Handles???
Код: Выделить всё
LONG CTapiConnection::InitLines(LPCTSTR pszAppName, DWORD dwAPIVersion)
{
   LONG lResult = -1;

   // Initialize the line portion of TAPI..
   LINEINITIALIZEEXPARAMS lip;
   ZeroMemory (&lip, sizeof(LINEINITIALIZEEXPARAMS));
    while (lResult != 0)
    {
      lip.dwTotalSize = sizeof(LINEINITIALIZEEXPARAMS);
      lip.dwOptions = LINEINITIALIZEEXOPTION_USEEVENT;
        lResult = lineInitializeEx (&m_hLineApp, AfxGetInstanceHandle(),
                         NULL, pszAppName, &m_dwNumLines, &dwAPIVersion, &lip);
        if (lResult != LINEERR_REINIT)
            break;
    }

   // If we were unsuccessful then return an error
   if (lResult != 0)
      return lResult;

   // Otherwise, open the line
   m_hTapiEvent_L = lip.Handles.hEvent;
   if (m_hTapiEvent_L == NULL)
      return LINEERR_NOMEM;

   // Create the thread which will monitor TAPI events.
   m_pMonitorThread_L = AfxBeginThread((AFX_THREADPROC) _LineEventProc, (void*)this);
   if (m_pMonitorThread_L == NULL)
   {
      TRACE(_T("Failed to create monitor thread\r\n"));
      lineShutdown(m_hLineApp);
      m_hLineApp = NULL;
      return LINEERR_OPERATIONFAILED;
   }

    return lResult;

}

UINT _LineEventProc ( LPVOID pParam )
{
   CTapiConnection* pConn = (CTapiConnection*) pParam;
   pConn->LineEventProc();
   return 0;

}

void CTapiConnection::LineEventProc()
{
   LINEMESSAGE lm;
   LONG lResult;

   // Spin forever waiting on TAPI to shutdown
   do
   {
      // Get the TAPI message
      lResult = lineGetMessage(m_hLineApp, &lm, 5000);
      if (lResult == 0)
      {
         // If this is an asynch request completing, then mark it in our list
         // and then pass it down to the line.
         if (lm.dwMessageID == LINE_REPLY)
            OnRequestComplete (lm.dwParam1, lm.dwParam2);
             
         // If this is a LINE_CREATE message, then a new line has been dynamically
         // added to TAPI (Plug&Play).  Manage it.
         else if (lm.dwMessageID == LINE_CREATE)
            OnLineCreate (lm.dwParam1);

         // If this is a LINE_REMOVE message, then a line has been removed from the system.
         else if (lm.dwMessageID == LINE_REMOVE)
            OnLineRemove (lm.dwParam1);

         else if (lm.dwMessageID == LINE_CLOSE)
            OnLineClose (lm.dwParam1);

         else // Line or call message.
         {
            CTapiLine* pLine = (CTapiLine*) lm.dwCallbackInstance;
            if (pLine != NULL)
               pLine->LineCallback (lm.hDevice, lm.dwMessageID, lm.dwParam1, lm.dwParam2, lm.dwParam3);
         }
      }

      // Kill any completed requests still in queue.
      PurgeRequests(5000);

   } while (lResult != LINEERR_INVALAPPHANDLE);

   m_pMonitorThread_L = NULL;

}
Лучший способ понять что-то самому — объяснить это другому.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Re: Translate.c++

Сообщение tyomitch » 11.12.2006 (Пн) 12:32

Antonariy писал(а):Мне здесь не понятен механизм создания потока и откуда в строчке m_hTapiEvent_L = lip.Handles.hEvent; взялось Handles???

MSDN писал(а):
Код: Выделить всё
typedef struct lineinitializeexparams_tag {
  DWORD  dwTotalSize;
  DWORD  dwNeededSize;
  DWORD  dwUsedSize;
  DWORD  dwOptions;
union
{
  HANDLE  hEvent;
  HANDLE  hCompletionPort;
} Handles;
  DWORD  dwCompletionKey;
} LINEINITIALIZEEXPARAMS, FAR *LPLINEINITIALIZEEXPARAMS;
Изображение


Вернуться в Народный треп

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 67

    TopList  
cron