gpt4 book ai didi

c - 使用第二个参数的 ReadConsoleOutputCharacter 错误

转载 作者:太空宇宙 更新时间:2023-11-04 03:04:05 26 4
gpt4 key购买 nike

http://msdn.microsoft.com/en-us/library/windows/desktop/ms684969(v=vs.85).aspx错误 C2664:“ReadConsoleOutputCharacterW”:无法将参数 2 从“char *”转换为“LPWSTR”

#include <windows.h>
#include <stdio.h>

int main(void)
{
HANDLE hOut;
char letter;
char letters[5];
DWORD numberRead;
COORD where_;

SetConsoleTitle(L"Hello!");
hOut = GetStdHandle(STD_OUTPUT_HANDLE);
where_.X = 0;
where_.Y = 0;
ReadConsoleOutputCharacter(hOut, &letter, 1, where_, &numberRead);
printf("letter at (0,0) is %c letter", letter);
return 0;
}

最佳答案

似乎您正在编译时启用了 unicode 支持(因为 ReadConsoleOutputCharacter 解析为 ReadConsoleOutputCharacterW ,否则它将解析为 ReadConsoleOutputCharacterA )。

这意味着与任何 WinAPI 函数一起使用的所有字符串和字符都需要是宽字符 WCHAR 而不是 charLPWSTR 而不是 LPSTR ,....或者您通过取消定义适当的预处理器符号( UNICODE_UNICODE ,我认为).但在这种情况下,您的 SetConsoleTitle 调用将不再有效,因为您显式地向它传递了一个宽字符串。

但最灵活的方法是使用 TCHAR 而不是 charLPTSTR 而不是 LPSTR 等等。这些只是根据 UNICODE 预处理器符号的定义定义为正确的类型。在这种情况下,代码保持广泛独立于 unicode 支持。但在这种情况下,您必须将所有字符串文字包装在 _TTTEXT 宏中:

//non-unicode
const char *str = "something";

//unicode
const WCHAR *str = L"something";

//unicode-agnostic
const TCHAR *str = _T("something");

有关问题的介绍,请参阅 here

如果你真的不需要 unicode 支持,只需要一些简单的 WinAPI 函数,并希望它们与 C 标准库很好地交互(就像你的情况一样),那么取消定义 UNICODE_UNICODE 并使用标准 char s。在这种情况下,还要从字符串文字中删除 L 修饰符。

关于c - 使用第二个参数的 ReadConsoleOutputCharacter 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7903341/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com