Windows上的C++ std :: string转换问题

Iva*_*nov 2 c++ windows string

这是我的程序:

bool Open(std::string filename)
{
    ...
    HANDLE hFile = CreateFile(filename.c_str(), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
    ...
}
Run Code Online (Sandbox Code Playgroud)

错误:'CreateFileW':无法将参数1从'const char*'转换为'LPCWSTR'指向的类型不相关; 转换需要reinterpret_cast,C风格的转换或函数式转换

问题出在哪儿?

jal*_*alf 13

std :: string由一个char数组组成,因此该c_str函数返回一个const char*.

A LPCWSTR是指向常量宽字符串的长指针,换句话说,const wchar_t*.

所以你有几个选择.要么将文件名作为宽字符串(std :: wstring)获取,要么指定您想要非宽版本的CreateFile.这可以通过调用CreateFileA或在项目设置中禁用UNICODE来完成.

CreateFile是一个宏,它根据是否启用了unicode,解析为CreateFileA(char版本)或CreateFileW(宽char版本).

  • 注意:正确的解决方案,特别是如果这是新软件,是使用std :: wstring. (3认同)