将代码从VC ++ 6移动到VC ++ 2008时出错

时间:2011-12-13 16:36:06

标签: .net visual-studio-2008 visual-c++

我正在创建 VC ++ 2008 Windows窗体应用程序,需要使用 VC6 项目中的一些类。

当我添加一个包含以下方法的文件时:

bool Property::createPaths(string &sPaths)
{
    char *tok = NULL;
    char seps[] = "\\";
    string str;
    if (sPaths.size() > 0)
    {
        tok = strtok((char*)sPaths.c_str(),seps);
        str  = tok;
        while (tok != NULL)
        {
            int res = CreateDirectory(str.c_str(),NULL);
            tok = strtok(NULL,seps);
            if (tok != NULL)
            {
                str += "\\";
                str += tok;
            }
        }
        return true;
    }
    return false;
}

我收到错误抱怨 CreateDirectory 调用:

* 错误C2664:'CreateDirectory':无法将参数1从'const char '转换为'LPCTSTR'

在线搜索,似乎我需要在我的VC2008项目上进行一些配置来解决这个问题。任何人都可以告诉我在哪里以及如何?

1 个答案:

答案 0 :(得分:3)

您正在将const char*传递给期待TCHAR*的函数。

TCHAR被定义为charwchar_t,具体取决于编译设置 - 默认情况下,在VC2008中为wchar_t。您对std::string的使用假定TCHARchar,这会导致您看到的错误。

您可以使用两种合理的修复方法:

  • 在项目设置中,将Configuration Properties/General/Character Set更改为Use Multi-Byte Character Set

或者

  • 重构您的代码以考虑TCHAR可能不同的定义 - 您可以通过将std::stringstd::wstring替换为std::basic_string<TCHAR>(使用适当的typedef)并在_T_TEXT宏中包装字符串文字。