通过使用下面的代码,我得到路径“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 的情况下解决此问题?
最佳答案
您可以使用:
mcTskInfo.pwszTaskTrigger = &strexepath[0];
或者,在 C++17 中,更具描述性并使用 data
:
mcTskInfo.pwszTaskTrigger = strexepath.data();
但要特别确保通过该指针写入的内容不会超过字符串的长度,也不会在 strexepath
的生命周期结束后使用它。
关于c++ - C++ 中不存在从 "std::wstring"到 "LPWSTR"的合适转换函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57990463/