0

我希望有人可以帮助向我解释一些在 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.Findand Str1.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 项目,它会起作用吗?

4

1 回答 1

0

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

Str1.Find(TEXT("Pear"));
于 2013-11-08T14:31:26.737 回答