c++ - 错误 C2440:“=”:无法从“const char *”转换为“LPCWSTR”
问题描述
我是新手Visual Studio
,需要编译应用程序,但出现错误: error C2440: '=': cannot convert from 'const char *' to 'LPCWSTR'
在线:
std::string open_file_dialog(
std::string title,
std::string filter)
{
char filename[MAX_PATH];
OPENFILENAME ofn;
ZeroMemory(&filename, sizeof(filename));
ZeroMemory(&ofn, sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = NULL;
ofn.lpstrFilter = filter.c_str();
ofn.lpstrFile = filename;
我相信这可能与我的项目设置有关,因为我正在查看的源代码应该按原样编译。但是,我不能 100% 确定。有谁可以帮我离开这里吗?
解决方案
关于windows API你需要知道的是它有2种风格,即UNICODE风格和非UNICODE风格。
当你包括windows.h
选择的风味取决于是否定义了 UNICODE。
许多(如果不是大多数)WINAPI 结构和函数只是宏,基本上只是在宏名称中添加 W 或 A 以获得您想要的东西的真实名称。
UNICODE 风格需要字符类型,wchar_t
而非 UNICODE 需要char
类型(或指向它们的指针)。
因此,您要么必须对结构和/或函数使用非宏名称,要么将类型的使用调整为所需的宏定义(在您的情况下使用 std::wstring 而不是 std::string)。
推荐阅读
- android - 如何将android应用程序连接到postgresql
- python - 求解隐式方程 Python
- android - 如何在 Android P 或更高版本电池耗尽时接收 ACTION_SHUTDOWN
- java - Android 应用程序 - 将传感器数据保存到本地文件
- flutter - 堆栈小部件内的 Flutter 定位类,不接受子属性
- sql-server - 获取另一个SP中的SP返回的Second Table Set
- javascript - Electron, Javascript 主进程发生错误
- html - 寻求建议 - 实现按钮以更改显示的文本
- r - 当缺少条时,如何避免条在分组图中变宽?
- reactjs - React.js 使用链接表选择