【问题标题】:argument of type WORD* is incompatible with parameter of type LPCWSTRWORD* 类型的参数与 LPCWSTR 类型的参数不兼容
【发布时间】:2015-08-03 10:11:41
【问题描述】:

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

【问题讨论】:

  • WORD 还是DWORD
  • 错误说是WORD*
  • 您对 WriteConsoleOutputCharacter 的第二次调用应该是对 WriteConsoleOutputAttribute 的调用。
  • 天啊!解决了它! :|没看到我这样做了。谢谢男人

标签: c++ lpcwstr


【解决方案1】:

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

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

【讨论】:

  • 我不明白 cursorTile 的类型是 CHAR_INFO 而不是 DWORD。 dwResult 的类型是 DWORD
  • 是的,但它抱怨完全不同的东西。阅读我的回答。
  • k 所以我的理解是我正在使用两种类型的字符串?而 writeconsoleoutputcharacter 想要我使用一个,它与 LPCWSTR 相关。对不起,如果我听起来很笨,我还在学习 C++
  • 我们都同意 writeconsoleoutputcharacter 打印一个字符串?
  • 是的 writeconsoleoutputcharacter 需要在屏幕上打印一个字符串。
【解决方案2】:

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

typedef unsigned long DWORD;

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

typedef CONST WCHAR *LPCWSTR;

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

【讨论】:

    猜你喜欢
    • 2016-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-28
    相关资源
    最近更新 更多