c++ - C++ 中不存在从 "std::wstring"到 "LPWSTR"的合适转换函数

标签 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 的情况下解决此问题?

最佳答案

您可以使用:

mcTskInfo.pwszTaskTrigger = &strexepath[0];

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

mcTskInfo.pwszTaskTrigger = strexepath.data();

但要特别确保通过该指针写入的内容不会超过字符串的长度,也不会在 strexepath 的生命周期结束后使用它。

关于c++ - C++ 中不存在从 "std::wstring"到 "LPWSTR"的合适转换函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57990463/

相关文章:

c++ - 什么时候函数应该使用 cstrings 而不是字符串? (C++)

c++ - 使用哪个代码片段来处理 USB 设备插入?

c++ - 如何为我的类(class)提供交换功能?

C++ 模式 : 1x base class + Nx derived classes BUT with a _last resort_ derived class

c++ - 形状像菱形的 OpenGL 2D 六角板

c++ - 在数组 C++ 中查找特定值

delphi - 从 TBitmap.Palette 中提取的颜色错误

c - 如何设置 Win32 窗口非客户区的大小(原生)

c++ - Visual Studio - 获取字符串中第一个字符的内存地址

c++ - C++ 中的重复 std::cin