аргумент типа WORD * несовместим с параметром типа LPCWSTR

Проблема в &cursorTile.Attributes.
Я получаю ошибку (argument of type "WORD*" is incompatible with parameter of type "LPCWSTR")
Я попытался найти некоторые решения, я использую многобайтовый набор символов.

void CMap::Draw(){
SMALL_RECT drawRect = { 0, 0, MAP_WIDTH - 1, MAP_HEIGHT - 1 };
COORD buffersize = { MAP_WIDTH, MAP_HEIGHT };
COORD zeroZero = { 0, 0 };
DWORD dwResult = 0;
char szCursor[2] = "";

HANDLE hOutput = GetStdHandle(STD_OUTPUT_HANDLE);

for (int i = 0; i < (int)m_vTiles.size(); i++){
m_screenBuffer[i] = m_vTiles[i].GetChar();
}

WriteConsoleOutput(hOutput, m_screenBuffer, buffersize, zeroZero, &drawRect);

if (g_pCursorTile != NULL){
CHAR_INFO cursorTile = g_pCursorTile->GetChar();
sprintf(szCursor, "%c", cursorTile.Char);
WriteConsoleOutputCharacter(hOutput, szCursor, 1, g_cursorPos, &dwResult);
WriteConsoleOutputCharacter(hOutput, &cursorTile.Attributes, 1, g_cursorPos, &dwResult);
}

0

Решение

это очень объяснительная ошибка.
WriteConsoleOutputCharacter ожидает некоторую строку в качестве второго аргумента. если ваша программа определена как Unicode, она ожидает LPCWSTR, который в основном является (некрасивым) определением типа с нулевым символом в конце wchar_t* строка.

в вашем заклинании вы передаете &cursorTile.Attributes который имеет тип DWORD* (что опять же, некрасивое определение типа unsigned long*). вам нужно передать строку с широким символом вместо длинного указателя без знака, то есть строки, которую вы пытаетесь напечатать.

1

Другие решения

DWORD: 32-разрядное целое число без знака. Диапазон от 0 до 4294967295
десятичный.

typedef unsigned long DWORD;

LPCWSTR: указатель на константу 16-битной строки с нулевым символом в конце
Юникод символы

typedef CONST WCHAR *LPCWSTR;

Оба являются разными типами данных.

0

По вопросам рекламы [email protected]