//исходная строка
const std::string dev_name = "COM4";
//создаем вектор нужной длины с учетом терминального нуля в конце std::vector<TCHAR> tchar_dev_name(dev_name.size() + 1);
//важно! используем std::copy(), а не memcpy()
std::copy(dev_name.begin(), dev_name.end(), tchar_dev_name.begin());
//нулевой символ в конце обязателен
tchar_dev_name[tchar_dev_name.size() - 1] = 0;
//дальше все как обычно
m_port = CreateFile(
&tchar_dev_name[0],
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
0,
NULL
);
Не надо выделять память руками и освобождать ее тоже не надо - за нас все делает STL. Уже на пару строчек меньше. И надежнее. Почему используем std::copy() вместо memcpy()? Потому что TCHAR, вообще говоря, это не тип, а макрос, который определяет тип (char или wchar_t) в зависимости от. То есть, в общем случае нельзя утверждать, что sizeof(char)==sizeof(wchar_t), а значит и memcpy() нам тоже не подходит и вместо него мы используем функцию std::copy(), которая копирует символы из одной строки в другую поштучно.
Комментариев нет:
Отправить комментарий