0

问题是&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);
}
4

2 回答 2

1

这是一个非常错误的错误。 WriteConsoleOutputCharacter期望某个字符串作为第二个参数。如果您的程序被定义为 unicode,则它需要LPCWSTR,这基本上是对空终止wchar_t*字符串的(丑陋的)类型定义。

在您的调用中,您传递&cursorTile.Attributes了类型为的DWORD*(又是丑陋的类型定义unsigned long*)。您需要传递一些宽字符字符串而不是无符号长指针,即您要打印的字符串。

于 2015-08-03T10:18:42.793 回答
0

DWORD:一个 32 位无符号整数。范围是 0 到 4294967295(十进制)。

typedef unsigned long DWORD;

LPCWSTR:指向 16 位 Unicode 字符的以空字符结尾的常量字符串的指针。

typedef CONST WCHAR *LPCWSTR;

两者都是完全不同的数据类型。

于 2015-08-03T10:24:10.773 回答