The Windows CreateFile function is actually a macro that expands to one of:
CreateFileA
, which takes a file path of typeconst char*
CreateFileW
, which takes a file path of typeconst wchar_t*
.
(The same is true for most of the functions in the Windows API that take a string.)
You’re declaring the parameter const char* ComName
, but apparently compiling with UNICODE
defined, so it’s calling the W
version of the function. There’s no automatic conversion from const wchar_t*
to const char*
, hence the error.
Your options are to:
- Change the function parameter to a UTF-16 (
const wchar_t*
) string. - Keep the
char*
parameter, but have your function explicitly convert it to a UTF-16 string with a function like MultiByteToWideChar. - Explicitly call
CreateFileA
instead ofCreateFile
. - Compile your program without
UNICODE
, so that the macros expand to theA
versions by default. - Kidnap a prominent Microsoft developer and force him to read UTF-8 Everywhere until he agrees to have Windows fully support UTF-8 as an “ANSI” code page, thus freeing Windows developers everywhere from this wide-character stuff.
Edit: I don’t know if a kidnapping was involved, but Windows 10 1903 finally added support for UTF-8 as an ANSI code page.