ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Понедельник
22 июля
1123414 Топик полностью
UniSoft (11.08.2021 04:25 - 18:45, просмотров: 419) ответил Constantin24 на Доброго всем! имеется проект с stm32 + VCP. В штатном режиме опрашивается программулькой - все ок. Делаем ресет мк, соответственно COM-порт исчезает, потом снова создается. Так вот программа не крашится, но перестает опрашивать. В своих приложения просто делал реопен порта. Сейчас же не получится(или не хотят внедрять такую логику). Мотивация тем, что при работе с MOXA1150, который также создает виртуальный com port, все пашет(опрос идет) при аналогичной ситуации. С другими
Windows не умеет автоматически переоткрывать порт. 

Но винда посылает соответствующие сообщения, где вы и должны это сделать самостоятельно.

смотрите в сторону WM_DEVICECHANGE


на C++ Builder это выглядит примерно так

// unit1.h

  BEGIN_MESSAGE_MAP
    MESSAGE_HANDLER(WM_DEVICECHANGE, TMessage, WMDeviceChange);
  END_MESSAGE_MAP(TForm)

// unit1.cpp
void __fastcall TForm1::WMDeviceChange(TMessage& Message) {
  PDEV_BROADCAST_PORT lpdbpr = reinterpret_cast<PDEV_BROADCAST_PORT>(Message.LParam);
  if (lpdbpr && lpdbpr->dbcp_devicetype == DBT_DEVTYP_PORT && lpdbpr->dbcp_name[0]) {
    if (Message.WParam == DBT_DEVICEREMOVECOMPLETE) {
   //printf(L"Removed: %s", lpdbpr->dbcp_name); // вот тут и закрываете HANDLE устройства, если было открыто.
    } else if (Message.WParam == DBT_DEVICEARRIVAL) {
   // printf(L"Inserted: %s", lpdbpr->dbcp_name); // А тут можете снова открыть
    }
  }
}