人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

VisualC++.NET2005での文字列の取り扱いについて。
最近VisualC++.NET2005でプログラムを始めたのですが、初心者向けの入門書などでは、例えばメッセージボックスに文字列を表示させるだけの処理であれば、

AfxMessageBox("テスト");

のようにすれば良いと、どの解説書にも書いてあったのですが、私の環境ではこれが何故かコンパイルエラーになってしまいます。
型が一致しないとのことなので、

AfxMessageBox(LPCTSTR("テスト"));

とすればコンパイルが通るのですが、
文字列を直接ソース中で扱う際のこのLPCTSTRマクロは必須になったのでしょうか?
それが何か別の方法があるのでしょうか?

初心者で申し訳ございませんがご教授下さい。

●質問者: istreet
●カテゴリ:コンピュータ
✍キーワード:.NET C++ エラー コンパイル ソース
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● SevenS
●20ポイント

メッセージボックス

上のリンクは参考までに。

VC++2005は使ったことがないので上の解決法は分かりません。

ですが、ひとまずLPCTSTRはマクロではないはずです。あくまでLPCWSTRとLPSTRを環境によって切り替える働きを持っているデータ型ですので。

上の場合は、

AfxMessageBox( TEXT( "テスト" ) )

がいいかと思います。TEXTマクロは、文字列をコンパイル時にLPCTSTRに対応する文字型配列として解釈させるためのものです。

◎質問者からの返答

なるほど、TEXTマクロですね!大変参考になりました。ありがとうございます。


2 ● villain
●40ポイント ベストアンサー

VC++2005ではデフォルトでUnicodeモードになっており

Wide Charが使用されます。

従来のANSIバージョンを使用したい場合はプロジェクトの設定で

キャラクタコードの設定をMBCSに設定する必要があります。


Wide CharバージョンAPIはWin9x系では使用できませんが

WinNT系専用とし、そのままUnicodeモードで対応する場合は

_TマクロまたはTEXTマクロをご利用ください。

(Lマクロを使用するとあとでMBCSに変更するのが大変なので)

◎質問者からの返答

なるほどですね、デフォルトでUnicodeが採用されているんですね。大変勉強になりました。


3 ● naochin
●20ポイント

OSのバージョンにより違いがあると思うのですが、

文字列の扱いがShiftJISかunicodeかによって変わってくるはずです。

本来は、LPCTSTRにキャストしなければいけないものです。

初心者用の本はよく間違っていたり不正確なことが書いてあることがあるので注意してください。

◎質問者からの返答

ありがとうございます。確かに本によって書いてあることが全然違う事があるので困っています。ありがとうございました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ