c++ - 宽字符和 Windows 函数的 cpp 问题

标签 c++

static void GetFilesFromDir(std::string dir, std::vector<std::string>& items)
{
    WIN32_FIND_DATA findData;
    HANDLE hFind=FindFirstFile((dir+"\\*").c_str(), &findData); //1 error
    do
    {
        if(hFind != INVALID_HANDLE_VALUE)
        {
            std::string sFileName = findData.cFileName; //2 error
            LPCSTR lp(sFileName.c_str());

            if(sFileName == "." || sFileName == "..")
            {} //do nothing
            else if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
                GetFilesFromDir(dir+"\\"+sFileName, items);
            else
                items.push_back(dir+"\\"+sFileName);
        }

    }   while (FindNextFile(hFind, &findData));
}

这是我刚刚从另一个项目复制到新项目的简单函数。而且它无缘无故地抛出错误,特别是因为它在其他项目中有效......

1>c:\users\prog\documents\visual studio 2010\projects\vampire stealth\vampire    stealth\smallfunctions.h(22): error C2664: 'FindFirstFileW' : cannot convert parameter 1 from 'const char *' to 'LPCWSTR'
1>          Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast

1>c:\users\prog\documents\visual studio 2010\projects\vampire stealth\vampire stealth\smallfunctions.h(27): error C2440: 'initializing' : cannot convert from 'WCHAR [260]' to 'std::basic_string<_Elem,_Traits,_Ax>'
1>          with
1>          [
1>              _Elem=char,
1>              _Traits=std::char_traits<char>,
1>              _Ax=std::allocator<char>
1>          ]
1>          No constructor could take the source type, or constructor overload resolution was ambiguous

有人知道哪里出了问题吗?我对此一无所知。

最佳答案

第一个错误:

...(dir+L"\\*").c_str()...

第二个错误:

std::wstring wFileName = findData.cFileName;

我认为你已经为项目设置了 UNICODE 标志,所以你需要使用宽字符。 wchar_t 代替 char 和 wstring 而不是字符串。

关于c++ - 宽字符和 Windows 函数的 cpp 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13896026/

相关文章:

c++ - 参数构造函数调用调用

c++ - 在子类函数覆盖中省略具有默认值的参数

c++ - 从 C++ 中的二进制文件读取和比较字节数据的最佳方法?

c++ - 关于指针取消引用的 C/C++ 问题

c++ - CMake 添加库

c++ - char (*test)[] 与 char *test1[] 之间的区别以及如何优雅地初始化测试?

c++ - 'DLLVERSIONINFO' 将项目从 VS2008 更新到 VS2012 后出现编译错误

c++ - 如何将 IntPtr 类型的参数从 C# 项目传递到我的 COM DLL 项目

c++ - 打开文件有问题

c++ - 可变参数模板中的分支