HRESULT CSocketSelectDlg::ThreadStart( )
{
  HRESULT hResult;

  if (m_hThread == NULL)
  {
    m_hThread = CreateThread(NULL, 0, (PTHREAD_START_ROUTINE) ThreadProc,
                             (LPVOID) this, CREATE_SUSPENDED, &m_dwThdId);

    if (m_hThread != NULL)
    {
      hResult = vciEnumDeviceOpen((PHANDLE) &m_hDevEnu);

      if (hResult == VCI_OK)
        ResumeThread(m_hThread);
      else
        ThreadStop(TRUE);
    }
    else
    {
      hResult = GetLastError();
    }
  }
  else
  {
    hResult = NO_ERROR;
  }

  return(hResult);
}
예제 #2
0
int CANDriver::initialize()
{
    CHAR errorBuffer[VCI_MAX_ERRSTRLEN];
    HRESULT vciResult;

    if ( (vciResult = vciInitialize()) != VCI_OK )
    {
        vciFormatError(vciResult, &errorBuffer[0], sizeof(errorBuffer));
        emit errorOccured(errorBuffer);
        return 1;
    }

    HANDLE hEnum;
    if ( (vciResult = vciEnumDeviceOpen(&hEnum)) != VCI_OK )
    {
        vciFormatError(vciResult, &errorBuffer[0], sizeof(errorBuffer));
        emit errorOccured(errorBuffer);
        return 1;
    }
    vciEnum_ptr phEnum(&hEnum, vciEnumDeviceClose);

    VCIDEVICEINFO deviceInfo;
    if ( (vciResult = vciEnumDeviceNext(hEnum, &deviceInfo)) != VCI_OK )
    {
        vciFormatError(vciResult, &errorBuffer[0], sizeof(errorBuffer));
        emit errorOccured(errorBuffer);
        return 1;
    }

    HANDLE hDevice;
    if ( (vciResult = vciDeviceOpen(deviceInfo.VciObjectId, &hDevice)) != VCI_OK )
    {
        vciFormatError(vciResult, &errorBuffer[0], sizeof(errorBuffer));
        emit errorOccured(errorBuffer);
        return 1;
    }
    vciDevice_ptr phDevice(&hDevice, vciDeviceClose);

    return 0;
}