• ベストアンサー

CString: 識別子が見つかりません

開発環境:Visual c++ 2008 Express Edion OS:Win XP Pro 次のエラーが表示されていて解決できません。 エラー内容は 1>d:\vc_source\dump\dump\Form1.h(448) : error C3861: 'CString': 識別子が見つかりませんでした です。 ちなみにinclude文は以下です。 #include <Windows.h> #include <stdio.h> #include <stdlib.h> #include <tchar.h> #include <string> #include <cstring> やりたいことは String型からCString型を経由して、TCHAR型へ変換することです。またはその逆方法の変換です。そのためにCString型は必要になるのですが、そこでコンパイルエラーになっています。 知っているかがおりましたら、教えて下さい。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

逆はStringクラスのコンストラクタで終わり。 TCHAR str[] = TEXT("ほげ"); String^ s = gcnew String(str); IntPtr p = System::Runtime::InteropServices::Marshal::StringToHGlobalAuto(s); const TCHAR* pstr = static_cast<const TCHAR*>(p.ToPointer()); /* 使わなくなったところで System::Runtime::InteropServices::Marshal::FreeHGlobal(p); は必要。 */ VS2008なら http://msdn.microsoft.com/ja-jp/library/bb384865.aspx が有効かも。

uranasu02
質問者

お礼

回答いただきありがとうございます。 やりたかったことは OpenFileDialog,SaveFileDialogのFileNameプロパテイ(String型)からchar*へ変換して、 open,read,close,fopen,fputs,fcloseなどのcの関数を使いファイルの内容を16進数でダンプすることです。 このダンプリストの機能は以下の3つである。 1.左側のアドレス部の出力の有無の指定、 2.右側の文字データ部の出力の有無の指定 3.中の16進数のダンプ(通常は1行に16個であるが)これを可変に指定できる(例えば300個とか) 関数とかメソッドを使用するに、引数の型によって、データを変換しなければので、質問したのです。 回答をいただきありがとうございます。

その他の回答 (2)

  • jgk
  • ベストアンサー率75% (104/138)
回答No.3

cstringはCStringのヘッダではありません。 C++で、C言語のstring.hで宣言されている関数を使うためにインクルードするヘッダです。

uranasu02
質問者

お礼

VC++は初心者なので、CString型を使用するには<cstring>ヘッダーファイルをインクルードすればよいと勝手に解釈して、<cstring>ヘッダーファイルをインクルードしたわけです。 回答をいただきありがとうございます。

回答No.1

Express Edition では CStringクラス(ATL)はデフォルトでは使えないはずですが。 >String型からCString型を経由して、TCHAR型へ変換することです。 CString型を経由する必要はないですね。 何故TCHAR型が必要なのかは不明ですが、Marshalクラスあたりを使えばできます。 (Encodingクラスで#ifdefしても可能) たぶんこれで。 Marshal::StringToHGlobalAuto

uranasu02
質問者

お礼

回答いただきありがとうございます。