C++ 错误:无法转换';常量字符**';{aka';const char**';}到';LPCSTR&x27;C+中的{aka';const char*';}+;

C++ 错误:无法转换';常量字符**';{aka';const char**';}到';LPCSTR&x27;C+中的{aka';const char*';}+;,c++,c++11,winapi,C++,C++11,Winapi,我有一大块正在调试的代码,我一直在试图弄清楚为什么在尝试构建项目时会出现以下错误: “错误:无法将'const CHAR**'{aka'const CHAR**'}转换为'LPCSTR' {aka'const char*'}” 问题在于wsKey参数ShregetValue是在Shlwapi.h标题中定义的函数,但我不知道如何解决这个问题,而且我对Windows API缺乏经验。如果有解决办法,请告诉我 LPCSTR wsKey[MAX_PATH] = {"Software\\Micr

我有一大块正在调试的代码,我一直在试图弄清楚为什么在尝试构建项目时会出现以下错误:

“错误:无法将'const CHAR**'{aka'const CHAR**'}转换为'LPCSTR' {aka'const char*'}”

问题在于
wsKey
参数
ShregetValue
是在
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]={“软件\\Microsoft\\Windows\\CurrentVersion\\Internet设置”};
wsKey
声明为
MAX\u PATH
字符指针的数组,其中第一个指针指向给定的字符串文字。如果这确实是您想要的,那么
shregetvalue
调用的第二个参数应该是第一个元素:
wsKey[0]

然而,更可能的是,您需要
wsKey
成为
MAX\u PATH
字符的数组,而不是指针。像这样:

const CHAR wsKey[MAX_PATH]=“软件\\Microsoft\\Windows\\CurrentVersion\\Internet设置”//注意移除了{…}括号!

shregetvalue
的第三个参数也有错误:这应该是
char
(或
char
)字符串,而不是
WCHAR
字符串(您混淆了调用的ANSI和Unicode版本)。如下声明
wsValue
,以使用ANSI版本:

CHAR wsValue[MAX_PATH]=“代理启用”;
或者,如果要使用宽字符(Unicode)版本,则需要将
wsKey
更改为宽字符串。(考虑到变量名,这似乎更有可能。)

const WCHAR wsKey[MAX_PATH]=L“软件\\Microsoft\\Windows\\CurrentVersion\\Internet设置”;
WCHAR wsValue[MAX_PATH]=L“ProxyEnable”;

你的问题在你的标题中没有得到回答:
常量字符**
不是
常量字符*
。为什么你期望它会起作用

我认为这是一个复制粘贴错误。你应该写:

LPCSTR wsKey = "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings";

LPCSTR是
const char*

的别名坦率地说,错误消息告诉您需要知道的内容。注意
const char**
const char*
之间的区别。你能看见吗
wsKey
被声明为
LPCSTR
的数组。您希望将其声明为
const char[]wsKey=“…”
,然后肯定会在
wsValue
上出错,因为您使用的是ANSI API。您应该真正使用Unicode API。