繁体   English   中英

错误:无法在 C++ 中将 'const CHAR**' {aka 'const char**'} 转换为 '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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM