我一直在使用底部的行
获得编译错误hFind = FindFirstFile(fileFilter.c_str()), &FindFileData);
编译器不断抛出error C2664 back at me, : cannot convert argument 1 from 'const char *' to 'LPCWSTR'
如何为std :: string创建一个LPCWSTR以传递给FindFirstFile?
这段代码供参考。
实际代码如下。
using namespace std;
void GetFileListing(string directory, string fileFilter, bool recursively = true)
{
if (recursively)
GetFileListing(directory, fileFilter, false);
directory += "\\";
WIN32_FIND_DATA FindFileData;
HANDLE hFind ;
string filter = directory + (recursively ? "*" : fileFilter);
string Full_Name;
string Part_Name;
// the line causing the compile error
hFind = FindFirstFile(fileFilter.c_str()), &FindFileData);
答案 0 :(得分:2)
WinAPI数据类型是可爱的简短缩写。 LPCWSTR
简称:
Long
Pointer to the start of
Const
Wide
STRing
因此它是const宽字符串(const wchar_t*
)的第一个字符的指针(长指针是历史记录),这意味着您需要使用std::wstring::c_str()
而不是std::string::c_str()
。
附注:请确保#define UNICODE
在任何地方使用WinAPI,否则您将获得有关转换为LPCSTR
的其他错误。或者,明确使用存在它们的W
版本的WinAPI函数。