2015-08-03 93 views
0
的参数不兼容

问题是&cursorTile.Attributes.
我越来越被(argument of type "WORD*" is incompatible with parameter of type "LPCWSTR")
我试图找到一些解决办法,我用的多字节字符集的错误。参数*与类型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

它是'WORD'还是'DWORD'? – Praveen

+0

错误说它是WORD * –

+0

您对WriteConsoleOutputCharacter的第二次调用应该是对WriteConsoleOutputAttribute的调用。 OMG! –

回答

1

这是非常explenetory错误。 WriteConsoleOutputCharacter需要一些字符串作为第二个参数。如果你的程序被定义为unicode,它预计LPCWSTR,这基本上是一个(丑)类型定义到一个以空字符结尾的wchar_t*字符串。

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

+0

我不明白的是cursorTile的类型是CHAR_INFO而不是DWORD。 dwResult的类型是DWORD –

+0

是的,但它抱怨的东西完全不同。阅读我的答案。 –

+0

k所以我明白的是,我使用2种类型的字符串?而writeconsoleoutputcharacter则希望我使用与LPCWSTR相关的一个。 sry如果我听起来dum im仍在学习C++ –

0

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

typedef unsigned long DWORD; 

LPCWSTR:一个指针,指向16位 Unicode字符的恒定空终止字符串。

typedef CONST WCHAR *LPCWSTR; 

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