Похоже, вы компилируете с включенной поддержкой юникода (потому что ReadConsoleOutputCharacter
разрешается в ReadConsoleOutputCharacterW
, в противном случае он разрешается в ReadConsoleOutputCharacterA
).
Это означает, что все строки и символы используются с любыми функциями WinAPIдолжны быть широкими символами WCHAR
вместо char
и LPWSTR
вместо LPSTR
, .... Или вы отключаете Юникод, отменяя определение соответствующих символов препроцессора (UNICODE
и _UNICODE
, я думаю).Но в этом случае ваш SetConsoleTitle
вызов больше не будет работать, поскольку вы явно передаете ему широкую строку.
Но наиболее гибким будет использование TCHAR
вместо char
и LPTSTR
вместо LPSTR
и тому подобное.Они просто определены для правильных типов в зависимости от определения символа препроцессора UNICODE
.В этом случае код остается широко независимым от поддержки юникода.Но в этом случае вы должны заключить все строковые литералы в макрос _T
, T
или TEXT
:
//non-unicode
const char *str = "something";
//unicode
const WCHAR *str = L"something";
//unicode-agnostic
const TCHAR *str = _T("something");
См. здесь для ознакомления с проблемой.
Если вам действительно не нужна поддержка юникода и вам нужны только некоторые простые функции WinAPI и вы хотите, чтобы они хорошо взаимодействовали со стандартной библиотекой C (как в вашем случае это кажется), лучше всего простоundefine UNICODE
и _UNICODE
и используйте стандартные char
s.В этом случае также удалите модификатор L
из строковых литералов.