VisualC++.NET2005での文字列の取り扱いについて。

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

AfxMessageBox("テスト");

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

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

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

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

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2006/06/01 13:36:43
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:villain No.2

回答回数174ベストアンサー獲得回数12

ポイント40pt

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

Wide Charが使用されます。

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

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


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

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

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

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

id:istreet

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

2006/06/01 13:34:23

その他の回答2件)

id:SevenS No.1

回答回数51ベストアンサー獲得回数3

ポイント20pt

メッセージボックス

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

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

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

上の場合は、

AfxMessageBox( TEXT( "テスト" ) )

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

id:istreet

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

2006/06/01 13:32:59
id:villain No.2

回答回数174ベストアンサー獲得回数12ここでベストアンサー

ポイント40pt

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

Wide Charが使用されます。

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

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


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

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

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

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

id:istreet

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

2006/06/01 13:34:23
id:naochin No.3

回答回数170ベストアンサー獲得回数8

ポイント20pt

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

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

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

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

id:istreet

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

2006/06/01 13:35:12

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません