通过使用以下代码,我得到了路径“ 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的情况下解决此问题?
答案 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();