2013-11-08 2 views
0

Я надеюсь, что кто-то может мне что-то объяснить, что касается CString в Visual Studio 2012. Я создаю новое приложение MFC в VS2012, добавьте кнопку в форму и добавьте следующий код к кнопке onclick для этой кнопки.Cstring не работает в VS 2012, но будет работать, если проект VC++ 6.0 открывается с использованием VS 2012

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.Find и 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 

Итак, я создал приложение MFC в Visual C++ 6.0, добавил кнопку на форму, и добавил тот же самый код в OnClick для кнопки. Затем я открыл этот проект с помощью VS2012, и были сделаны необходимые изменения, чтобы сделать его совместимым. Теперь этот код отлично работает в Visual Studio 2012. Я пришел к выводу (возможно, неправильно), что, когда Visual Studio 2012 открывает проект Visual C++ 6.0 и вносит изменения, он добавляет что-то вроде другого файла или оператора #include. Я сравнил эти два проекта, и я не могу для жизни понять, что происходит. Может ли кто-нибудь пролить свет на то, почему этот код не работает в Visual Studio 2012, но будет работать, если я открою проект Visual C++ 6.0 с помощью Visual Studio 2012?

ответ

0

В вашем проекте VC6 вы, вероятно, не используете Unicode, и поэтому он работает с «Pear», «Apple» и т. Д. Измените свои строки так, чтобы они использовали макрос TEXT(). Например:

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

Это прекрасно сработало. Я думаю, теперь все это начинает иметь смысл. Раньше я сменил код на CStringA, и он отлично работал. Можно ли с уверенностью сказать, что когда я компилирую проект VS2012, он обрабатывает CString как wchar_t вместо char? – Dan068

+0

@ Dan068 «Набор символов» для использования - это настройка конфигурации проекта. Для VS2010 он находится в Configuration Properties -> General. Я предполагаю, что он находится в том же месте для VS2012. –

Смежные вопросы