通过使用下面的代码,我得到了路径"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的情况下修复此问题?
发布于 2019-09-18 10:23:52
您可以使用:
mcTskInfo.pwszTaskTrigger = &strexepath[0];
或者,在C++17中,更具描述性,使用data
mcTskInfo.pwszTaskTrigger = strexepath.data();
但要特别确保不会通过该指针写入超过字符串长度的内容,也不会在strexepath
的生命周期结束后使用它。
发布于 2019-09-18 14:47:21
使用以下内容:
mcTskInfo.pwszTaskTrigger=const_cast<wchar_t*>(strexepath.c_str());
您也可以使用C风格的强制转换而不是const_cast。然后这行看起来就像这样:
mcTskInfo.pwszTaskTrigger = (LPWSTR)strupdatepath.c_str();
https://stackoverflow.com/questions/57990463
复制相似问题