[英]cannot convert 'wchar_t*' to 'LPCSTR' {aka 'const char*'}
[英]error: cannot convert 'const CHAR**' {aka 'const char**'} to 'LPCSTR' {aka 'const char*'} in C++
我正在调试一大段代码,我一直在试图弄清楚为什么在尝试构建项目时会出现以下错误:
“错误:无法将 'const CHAR**' {aka 'const char**'} 转换为 'LPCSTR' {aka 'const char*'}”
问题在于wsKey
参数。 SHRegGetValue
is a function defined in the Shlwapi.h
header, but I don't know how to fix this and I am inexperienced with the Windows API. 请让我知道是否有解决方案。
LPCSTR wsKey[MAX_PATH] = {"Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings"};
WCHAR wsValue[MAX_PATH] = L"ProxyEnable";
DWORD dwValue = (DWORD)FALSE;
DWORD dwSize = sizeof(dwValue);
LONG nStatus = SHRegGetValue(HKEY_CURRENT_USER, wsKey, wsValue, SRRF_RT_DWORD, NULL, &dwValue, &dwSize);
该行:
LPCSTR wsKey[MAX_PATH] = {"Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings"};
将wsKey
声明为MAX_PATH
字符指针数组,其中第一个指向给定的字符串文字。 如果这确实是您想要的,那么SHRegGetValue
调用的第二个参数应该是第一个元素: wsKey[0]
。
但是,更有可能的是,您需要wsKey
是一个MAX_PATH
字符数组——而不是指针。 像这样:
const CHAR wsKey[MAX_PATH] = "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings"; // Note the removal of the enclosing {...} braces!
SHRegGetValue
的第三个参数也有错误:这应该是char
(或CHAR
)字符串,而不是WCHAR
字符串(您正在混淆调用的 ANSI 和 Unicode 版本)。 像这样声明wsValue
,以使用 ANSI 版本:
CHAR wsValue[MAX_PATH] = "ProxyEnable";
或者,如果您打算使用宽字符 (Unicode) 版本,则需要将wsKey
更改为宽字符字符串。 (考虑到变量名,这似乎更有可能。)
const WCHAR wsKey[MAX_PATH] = L"Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings";
WCHAR wsValue[MAX_PATH] = L"ProxyEnable";
您的标题中没有回答您的问题吗: const char**
is not const char*
。 为什么你期望它应该工作?
我认为这是一个复制和粘贴错误。 你应该写:
LPCSTR wsKey = "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings";
LPCSTR 是const char *
的别名
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.