我有一大段代码正在调试,但我一直在试图弄清楚为什么在我尝试构建项目时会出现以下错误:
<块引用>"错误:无法将 '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);
答案 0 :(得分:4)
行:
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
答案 1 :(得分:0)
您的问题不是在标题中回答了吗:const char**
不是 const char*
。为什么你认为它应该有效?
我认为这是复制和粘贴错误。你应该写:
LPCSTR wsKey = "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings";
LPCSTR 是 const char *
的别名