プロが教える店舗&オフィスのセキュリティ対策術

開発環境: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型は必要になるのですが、そこでコンパイルエラーになっています。

知っているかがおりましたら、教えて下さい。

A 回答 (3件)

逆は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 …
が有効かも。
    • good
    • 0
この回答へのお礼

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

関数とかメソッドを使用するに、引数の型によって、データを変換しなければので、質問したのです。

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

お礼日時:2009/11/11 10:14

cstringはCStringのヘッダではありません。


C++で、C言語のstring.hで宣言されている関数を使うためにインクルードするヘッダです。
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/11/11 10:18

Express Edition では CStringクラス(ATL)はデフォルトでは使えないはずですが。



>String型からCString型を経由して、TCHAR型へ変換することです。
CString型を経由する必要はないですね。
何故TCHAR型が必要なのかは不明ですが、Marshalクラスあたりを使えばできます。
(Encodingクラスで#ifdefしても可能)

たぶんこれで。
Marshal::StringToHGlobalAuto
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/11/11 09:54

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!