gpt4 book ai didi

c++ - 如何从常量字符串初始化 LPWSTR?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:06:27 26 4
gpt4 key购买 nike

我正在尝试初始化 MENUITEMINFO 以调用 InsertMenuItem。尝试将 const 字符串分配给 dwTypeData 时,出现错误。以下代码来自 MSDN 示例。

两种类型的赋值都出现错误

mii.dwTypeData = "&Sample text";
mii.dwTypeData = L"&Sample text";

我正在使用 Visual Studio 2019。

  MENUITEMINFO mii = { sizeof(mii) };
mii.fMask = MIIM_STRING | MIIM_FTYPE | MIIM_ID | MIIM_STATE;
mii.wID = idCmdFirst + IDM_DISPLAY;
mii.fType = MFT_STRING;
mii.dwTypeData = L"&Sample Text";
mii.fState = MFS_ENABLED;
if (!InsertMenuItem(hMenu, indexMenu, TRUE, &mii))
{
return HRESULT_FROM_WIN32(GetLastError());
}

错误是错误(事件)E0144 类型“const wchar_t *”的值不能用于初始化类型“wchar_t *”的实体

根据 Microsoft 文档,第二个应该可以。 https://learn.microsoft.com/en-us/windows/win32/learnwin32/working-with-strings

编辑:I cannot initializate WCHAR 没有解决这个问题因为我无法按照该答案中的建议更改类型。

最佳答案

某些 Windows 结构用于“获取和设置”,这些结构中的字符串成员指向可变字符串。这与将字符串文字存储在只读存储器中的编译器/链接器设置直接冲突。

从理论上讲,将字符串文字与 setter 函数一起使用是不安全的,因为它可能会写入字符串(然后将其恢复为原始内容)。

发生这种情况的唯一已知位置是 CreateProcessW 中的命令行参数。

在所有其他地方,您可能只需丢弃 const:

MENUITEMINFO mii = { sizeof(mii) };
mii.dwTypeData = const_cast<LPTSTR>(TEXT("&Sample Text"));

关于c++ - 如何从常量字符串初始化 LPWSTR?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57611836/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com