Для сборки Unicode CreateFile
отображается на CreateFileW
, что предполагает "широкие" строки символов. Вы можете решить непосредственную проблему, добавив префикс вашей строковой константы к L, например:
CreateFile(L"COM1", ...);
Некоторые люди предлагают явно использовать широкую версию:
CreateFileW(L"COM1", ...);
Или вы можете явно использовать версию "ANSI", даже в сборке Unicode:
CreateFileA("COM1", ...);
Если вы хотите иметь возможность строить сборки Unicode и ANSI, вы можете использовать макрос, который может включать префикс L. Существует две версии этого макроса: TEXT(x)
и _T(x)
. Если я правильно помню, первое происходит из Windows API через <tchar.h>
, а второе - из реализации Microsoft библиотеки времени выполнения C. Поскольку это Windows API, я бы использовал TEXT
версию.
CreateFile(TEXT("COM"), ...);
В настоящее время, вероятно, не стоит сохранять обратную совместимость для ANSI. Все версии Windows, выпущенные в последнее десятилетие, используют Юникод для внутреннего использования, поэтому, если вы попытаетесь использовать версии ANSI, строки будут расширены во время выполнения. Так что я не буду беспокоиться о макросах и просто добавлю префикс строковых литералов к L
, за исключением особых случаев.