首页 文章

WORD *类型的参数与LPCWSTR类型的参数不兼容

提问于
浏览
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);
}

2 回答

  • 1

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

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

  • 0

    DWORD:32位无符号整数 . 范围是0到4294967295十进制 .

    typedef unsigned long DWORD;
    

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

    typedef CONST WCHAR *LPCWSTR;
    

    两者都是不同的数据类型 .

相关问题