如何解决错误:无法在 C++ 中将 'const CHAR**' {aka 'const char**'} 转换为 'LPCSTR' {aka 'const char*'}
我有一大段代码正在调试,但我一直在试图弄清楚为什么在我尝试构建项目时会出现以下错误:
"错误:无法将 'const CHAR**' {aka 'const char**'} 转换为 'LPCSTR' {aka 'const char*'}"
问题在于 wsKey
参数。 SHRegGetValue
是在 Shlwapi.h
标头中定义的函数,但我不知道如何解决这个问题,而且我对 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
)字符串,不是一个 {{1 }} 字符串(您混淆了调用的 ANSI 和 Unicode 版本)。像这样声明 WCHAR
,以使用 ANSI 版本:
wsValue
或者,如果您打算使用宽字符 (Unicode) 版本,那么您需要将 CHAR wsValue[MAX_PATH] = "ProxyEnable";
更改为宽字符字符串。 (鉴于变量名称,这似乎更有可能。)
wsKey
,
您的问题不是在标题中回答了吗:const char**
不是 const char*
。为什么你认为它应该有效?
我认为这是复制和粘贴错误。你应该写:
LPCSTR wsKey = "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings";
LPCSTR 是 const char *
的别名
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。