C++ 错误:无法转换';常量字符**';{aka';const char**';}到';LPCSTR&x27;C+中的{aka';const char*';}+;
我有一大块正在调试的代码,我一直在试图弄清楚为什么在尝试构建项目时会出现以下错误: “错误:无法将'const CHAR**'{aka'const CHAR**'}转换为'LPCSTR' {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
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。