FindFirstFile的预期输入类型是什么
What is the expected input type of FindFirstFile?
我首先要说的是,我对宽字符串和Unicode支持基本一无所知。99%的时间我都让QString和QFile来处理,但我正在尝试编译别人为VC6编写的库。
当我在Qt Creator中使用MSVC2010编译时,我得到了以下错误:
error: C2664: 'FindFirstFileW' : cannot convert parameter 1 from 'const char *' to 'LPCWSTR'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
代码使用的是FindFirstFile
函数,它是重载的(有点),这取决于您是否使用Unicode字符集进行编译。当FindFirstFileA和FindFirstFileW的输入似乎是两种完全不同的类型时,我不明白FindFirstFile
期望的是什么类型。
所以我的问题是:FindFirstFile
的预期输入类型是什么?
推论:如何获取类型为const char*
的文件名,并将其放入FindFirstType将接受的表单中?
FindFirstFile是一个宏,定义如下:
#ifdef UNICODE
#define FindFirstFile FindFirstFileW
#else
#define FindFirstFile FindFirstFileA
#endif // !UNICODE
这意味着,当使用定义的UNICODE
编译时,它会扩展到具有W
的,否则它会扩展为具有A
的。
现在,FindFirstFile
的第一个参数是LPCSTR
或LPWCSTR
。CCD_ 11是CCD_ 12的typedef,而CCD_。在错误消息中,您尝试将const char*
类型作为第一个参数传递给FindFirstFileW
,CCD_16接受const wchar_t*
类型的参数,因此出现错误。
为了使类型匹配,您需要传递const wchar_t*
类型的对象,您有几个选项:
std::wstring path1 = L"..."; // 1
const wchar_t* path2 = L"..."; // 2
wchar_t path3[] = L"..."; // 3
WIN32_FIND_DATA w32fd;
FindFirstFile(path1.c_str(), &w32fd); // 1
FindFirstFile(path2, &w32fd); // 2
FindFirstFile(path3, &w32fd); // 3
FindFirstFile(L"...", &w32fd);
如何获取const-char*类型的文件名并将其放入表单中FindFirstType会接受吗?
如果文件名仅包含基本ASCII字符集中的字符,则可以将其转换为std::wstring
,如下所示:std::wstring path(std::begin(filename), std::end(filename));
。否则,您将需要使用MultiByteToWideChar或此处显示的许多选项。另一种选择是直接调用FindFirstFileA
,但如果您在windows上,通常最好从wchar_t
开始。
如果您是为unicode编译,则预期的输入类型为const wchar_t*。(你是什么:'W'参数告诉了我们这一点。).如果你不是为unicode编译,那么预期的输入类型是const-char*。在解决问题之前,您必须决定是否编译unicode。如果您选择unicode,那么您的字符串应该是wchar_t*或std::wstring或CString。这应该会让你的问题消失。
如果您确实需要在unicode编译的应用程序中使用const char*,则必须通过调用MultiByteToWideChar API函数将const char**转换为const wchar_t*字符串。
- 标准 N3337 5.2.10 第 7 条中的C++"类型"是什么意思?
- 如何声明一个标准::提升直方图的向量?提升直方图的类型是什么?
- 类名后跟括号的类型是什么
- std::chrono::duration::count函数的实际结果类型是什么
- c++运算符重载-我实际返回的操作数类型是什么
- 运算符和返回类型是什么意思?
- 指向 2D 数组的指针的类型是什么?
- RSA_verify中预期的数据类型是什么,无法验证从 Java 生成的签名
- 共享_ptr中多功能数组的类型是什么
- 构造函数的类型是什么?
- 字符串中单个字符作为数组的数据类型是什么
- 该结构继承的类型是什么
- 如果我获得Integer和Double的产品,输出的数据类型是什么
- C 中被视为可可的类型是什么
- 当函数采用右值引用时,函数中该变量的类型是什么?
- STD :: SETW,STD :: SETFILL等的真实返回类型是什么?
- 模板类中引用的引用的类型是什么
- const自动参考绑定到(NULL)指针 - 实际类型是什么
- 包含通过引用捕获的 lambda 函数的"variable"的类型是什么?
- 通过插座发送的内容的数据类型是什么