2011-12-13 30 views
0

我正在创建一个VC++ 2008 Windows窗体应用程序,它需要使用我们的VC6项目中的一些类。将代码从VC++ 6移动到VC++ 2008时出错

当我增加了一个文件,其中包含下面的方法:

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项目来解决这个问题。任何人都可以告诉我在哪里以及如何?

回答

3

您正将一个const char*传递给期望TCHAR*的函数。

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

有两种方法供您合理的修正:

  • 在您的项目设置,更改Configuration Properties/General/Character SetUse Multi-Byte Character Set

或者

  • 重构代码,以占TCHAR潜在不同的定义 - 你会用std::basic_string<TCHAR>更换任何使用std::stringstd::wstring(使用适当的typedef)启动此,敷串文字中的_T_TEXT宏。
+0

+1,十分钟没有回答,所以我写了一个你打败了我。 –