错误 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,您需要了解的是它有两种风格,即UNICODE风格和-UNCODE风格。

当您包含windows.h

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

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

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

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

您可能激活了UNICODE,所以OPENFILENAME变成了OPENFILENAMEW,而不是OPENFILENAMEA,这就是ofn.lpstrFilter = filter.c_str();失败的原因。

lpstrFilterW版本中的wchar_t*

您可能应该坚持使用UNICODE,并更改为使用std::wstrings,这将使您获得对WinAPI的最佳访问权限。某些功能在A(Ansi(模式下的工作方式不同(更差(。

最新更新