C ++中不存在从“ std :: wstring”到“ LPWSTR”的合适转换函数

时间:2019-09-18 10:19:09

标签: c++ c++11 winapi

通过使用以下代码,我得到了路径“ C:\ ProgramFiles”

然后将“ \ Test \ myupdate.exe”附加到它。

之后,我将该路径存储在“ pwszTaskTrigger”结构变量中,如下所示:

mcTskInfo.pwszTaskTrigger = strexepath;

但是,在存储时,我收到一条警告消息(“不存在从“ std :: wstring”到“ LPWSTR”的合适转换函数”)

下面是完整的代码:

MCTASKINFO mcTskInfo = { 0 };
WCHAR szCommonFiles[MAX_PATH] = { 0 };
lRet = SHGetFolderPathW(NULL, CSIDL_PROGRAM_FILES, NULL, 0, szCommonFiles);
std::wstring strexepath = L"";
    strexepath.append(szCommonFiles);  //szCommonFiles gives the path "C:\\ProgramFiles"
    strexepath.append(ADD_MCUPDTPATH);
    mcTskInfo.pwszTaskTrigger = strexepath;

#define ADD_MCUPDTPATH          L"\\Test\\myupdate.exe"


struct MCTASKINFO
{

LPWSTR pwszTaskTrigger; 

};

在这里,我不应将结构变量pwszTaskTrigger从LPWSTR更改为LPCWSTR。因为此文件是包含文件。

如何在不将LPWSTR更改为LPCWSTR的情况下解决此问题?

2 个答案:

答案 0 :(得分:1)

您可以使用:

mcTskInfo.pwszTaskTrigger = &strexepath[0];

或者,在C ++ 17中,更具描述性,请使用data

mcTskInfo.pwszTaskTrigger = strexepath.data();

但是要确保没有什么东西比通过该指针的字符串长度写多,也不要在strexepath的生命周期结束后使用它。

答案 1 :(得分:1)

使用以下内容:

mcTskInfo.pwszTaskTrigger=const_cast<wchar_t*>(strexepath.c_str());

您还可以使用C样式强制转换而不是const_cast。然后该行将如下所示:

mcTskInfo.pwszTaskTrigger = (LPWSTR)strupdatepath.c_str();