首页 > 解决方案 > 错误 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% 确定。有谁可以帮我离开这里吗?

标签: c++winapivisual-studio-2015lpcwstr

解决方案


关于windows API你需要知道的是它有2种风格,即UNICODE风格和UNICODE风格。

当你包括windows.h

选择的风味取决于是否定义了 UNICODE。

许多(如果不是大多数)WINAPI 结构和函数只是宏,基本上只是在宏名称中添加 W 或 A 以获得您想要的东西的真实名称。

UNICODE 风格需要字符类型,wchar_t而非 UNICODE 需要char类型(或指向它们的指针)。

因此,您要么必须对结构和/或函数使用非宏名称,要么将类型的使用调整为所需的宏定义(在您的情况下使用 std::wstring 而不是 std::string)。


推荐阅读