微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

错误:无法在 C++ 中将 'const CHAR**' {aka 'const char**'} 转换为 'LPCSTR' {aka 'const char*'}

如何解决错误:无法在 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 举报,一经查实,本站将立刻删除。