Ошибка неверного параметра при использовании GetDefaultCommConfig - PullRequest
0 голосов
/ 14 февраля 2019

У меня возникла та же проблема, в которой я получил параметр имени порта LPTSTR в качестве входных данных от функции. Я должен преобразовать это в wstring, чтобы я мог получить параметры порта.

ниже приведен фрагмент кода, в котором я пытаюсь скопировать lptstr в wstring.

         void C_PORT_MONITOR::SetPrinterComPortParam(LPTSTR   PortName)
          {
          #ifdef _UNICODE
          std::wstring          l_ComPortName;
          #else
          std::string               l_ComPortName;
          #endif
         DWORD dwSize,le = 0;
      dwSize = sizeof(COMMCONFIG);
     LPCOMMCONFIG lpCC = (LPCOMMCONFIG) new BYTE[dwSize];
     l_ComPortName = PortName;//mPortName;  
        if(l_ComPortName.length() <= 0 )
        return;
   bool SetFlag = false;
 //Get COMM port params called to get size of config. block
  int length = l_ComPortName.length();
  int iPos = l_ComPortName.find_first_of(':'); 
  int iChc = length- iPos; //remove the charactrers after :
  l_ComPortName = l_ComPortName.substr(0, (length- iChc)); //remove the characters from colon  //COM1
//Get COMM port params with defined size
   BOOL ret = GetDefaultCommConfig(l_ComPortName.c_str(), lpCC, &dwSize);  
_RPT1(_CRT_WARN, "C_PORT_MONITOR::SetPrinterComPortParam length=%x,iPos=%x,iChc=%x,l_ComPortName=%s",length, iPos, iChc, l_ComPortName);
if(!ret)
{
    le = GetLastError();
    _RPT1(_CRT_WARN ,"C_PORT_MONITOR::SetPrinterComPortParam LastError=%x",le);
}

Мне нужно назначить это имя порта для l_comportname.и мне нужно создать подстроку из этого l_comportname как COM1, и я должен использовать эту подстроку в getdafaultcommconfig ()

1 Ответ

0 голосов
/ 14 февраля 2019

Ваша ошибка - второй параметр, а не первый.Ваш оператор отладки содержит ошибки, потому что он не учитывает широкие строки %s только для узких строк, вы должны использовать %S для широкой строки.

Вот реальная ошибка

 dwSize = sizeof(COMMCONFIG);
 LPCOMMCONFIG lpCC = (LPCOMMCONFIG) new BYTE[dwSize];
 lpCC->dwSize = sizeof(COMMCONFIG); // this line is needed

Возможно, вам это также понадобится (документация не очень ясна)

 lpCC->wVersion = 1;

В программировании Windows очень часто приходится инициализировать структуру с размером структуры.

Ссылка: https://technet.microsoft.com/en-us/aa363188(v=vs.90)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...