Cstring在VS 2012中不起作用,但如果使用VS 2012打开VC ++ 6.0项目,则可以正常工作

时间:2013-11-08 14:25:04

标签: c++ visual-studio-2012

我希望有人可以帮我解释在Visual Studio 2012中处理CString的事情。我在VS2012中创建一个新的MFC应用程序,在表单中添加一个按钮,然后将以下代码添加到该按钮的onclick 。

CString Str1;
CString Str2;


Str1 = "Apple";

Str2 = "Pear";

Str1+= Str2;
AfxMessageBox(Str1);

int K = 0;
K = Str1.Find("Pear");

Str1.Format("%d", K);
Str1.TrimLeft();
AfxMessageBox(Str1);

在构建解决方案之前,我发现它不喜欢Str1.FindStr1.Format。它给出了这个错误......

error C2664: 'int ATL::CStringT<BaseType,StringTraits>::Find(wchar_t,int) throw() const' :   
cannot convert parameter 1 from 'const char [5]' to 'wchar_t'
      with
      [
          BaseType=wchar_t,
         StringTraits=StrTraitMFC_DLL<wchar_t>
      ]
      There is no context in which this conversion is possible

然后我在Visual C ++ 6.0中创建了一个MFC应用程序,在表单中添加了一个按钮,并在按钮的onclick中添加了相同的代码。然后我使用VS2012打开了这个项目,并进行了必要的更改以使其兼容。现在,代码在Visual Studio 2012中运行得非常好。我已经得出结论(可能不正确),当Visual Studio 2012打开Visual C ++ 6.0项目并进行更改时,它会添加类似于另一个文件或#include语句的内容。我比较了这两个项目,我不能为我的生活弄清楚发生了什么。任何人都可以解释为什么这个代码在Visual Studio 2012中不起作用,但是如果我用Visual Studio 2012打开Visual C ++ 6.0项目会有效吗?

1 个答案:

答案 0 :(得分:0)

在您的VC6项目中,您可能不使用Unicode,因此它适用于“Pear”,“Apple”等。 更改字符串,以便它们使用TEXT()宏。例如:

Str1.Find(TEXT("Pear"));