【问题标题】:Cstring not working in VS 2012, but will work if VC++ 6.0 project is opened using VS 2012Cstring 在 VS 2012 中不起作用,但如果使用 VS 2012 打开 VC++ 6.0 项目则可以使用
【发布时间】:2013-11-08 14:25:04
【问题描述】:

我希望有人能帮我解释一下在 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 项目就可以了?

【问题讨论】:

    标签: c++ visual-studio-2012


    【解决方案1】:

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

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

    【讨论】:

    • 效果很好,谢谢。我认为现在一切都开始变得有意义了。以前,我更改了代码以包含 CStringA,它也运行良好。是否可以肯定地说,当我编译 VS2012 项目时,它会将 CString 视为 wchar_t 而不是 char?
    • @Dan068 要使用的“字符集”是项目配置设置。对于 VS2010,它位于 Configuration Properties->General 中。我假设它与 VS2012 位于同一位置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-24
    • 1970-01-01
    相关资源
    最近更新 更多