当我运行C ++代码时,总是出现Visual Studio错误C2664

问题描述 投票:0回答:1

当我使用此代码时

if (GetKeyNameText(Key << 16, NameBuffer, 127))
{
    KeyName = NameBuffer;
    GoodKeyName = true;
}

我收到以下错误

C2664'int GetKeyNameTextW(LONG,LPWSTR,int)':无法转换参数2从'char [128]'到'LPWSTR'

NameBuffer这样说:

错误:“ char *”类型的参数与类型的参数不兼容“ LPWSTR”

任何提示?

c++ c2664
1个回答
2
投票

您已定义UNICODE,这意味着您的所有功能以及TCHARLPTSTR默认为字符(wchar_t)。

这意味着如果没有特别注意,就不能使用窄字符字符串(使用char)。

有一个简单的解决方案,那就是显式调用该函数的窄字符版本:GetKeyNameTextA

另一种解决方案是停止使用char并更改为TCHAR和相关类型,并将T宏用于字符串文字。

您可能想了解有关UNICODE in the Windows API的更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.