gpt4 book ai didi

c++ - 类型 "const char *"的值不能分配给类型 "LPSTR"的实体

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:21:41 28 4
gpt4 key购买 nike

这个问题可能已经有了答案,但我觉得我需要问这个问题,因为我似乎无法获得代码在 VS Community 2017 上按预期工作所需的答案,因为它有效在 VS Express Edition 上表现良好。

我正在尝试实现从 c 项目中获取的代码,但我看不出如何解决该错误:

Value of type "const char *" cannot be assigned to an entity of type "LPSTR"

cannot convert from 'const char [7]' to 'LPSTR'

    MENUITEMINFO mii = { 0 };

mii.cbSize = sizeof(MENUITEMINFO);
mii.fMask = MIIM_TYPE;
mii.fType = MFT_STRING;
mii.dwTypeData = _T("item 1"); // error is on this line
mii.dwTypeData = _T("item 2"); // error is on this line also

注意:

  1. 这是 C++ 项目中的 C 代码。它在 VS Express Edition 中运行,但无法在 VS Community 2017
  2. 上编译
  3. VS Express Edition 我只是将字符集更改为多字节并且它有效,但在 VS Community 2017 上似乎没有任何效果,我看不出如何解决代码本身

最佳答案

字符串文字的类型为const char[N],其内容不得修改。将字符串文字隐式转换为 char* 的能力仅在 C++ 中存在,以便与 C 向后兼容。这是一件非常危险的事情,基本上已被永久弃用,并最终在 C++11 中被删除. Visual Studio 2017 将默认语言标准切换为 C++14,这很可能是您的代码在那里停止工作的原因。如果您绝对肯定地确定指向的字符串不会被修改,那么您可以使用 const_cast

MENUITEMINFO mii = { 0 };

mii.cbSize = sizeof(MENUITEMINFO);
mii.fMask = MIIM_TYPE;
mii.fType = MFT_STRING;
mii.dwTypeData = const_cast<char*>("item 1");

理想情况下,您只需使用 const char*,但不幸的是,与一些旧的 C API 互操作时,有时需要使用 const_cast。在执行此类操作之前,请始终检查 API 文档以确保 API 无法尝试修改字符串的内容。

对于此处的 MENUITEMINFOdwTypeDatachar* 而不是 const char* 的原因 很可能该结构旨在与 GetMenuItemInfoSetMenuItemInfo 一起使用,其中前者需要指向缓冲区的指针,它将在其中写入字符串而后者需要一个指向缓冲区的指针,它将从中读取一个字符串……

关于c++ - 类型 "const char *"的值不能分配给类型 "LPSTR"的实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55473683/

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