0

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.Findソリューションを構築する前に、 andが気に入らないことがわかります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 ステートメントのようなものが追加されるという結論に達しました (おそらく間違っています)。私は 2 つのプロジェクトを比較しましたが、何が起こっているのか一生わかりません。このコードが 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 に答える