最近VisualC++.NET2005でプログラムを始めたのですが、初心者向けの入門書などでは、例えばメッセージボックスに文字列を表示させるだけの処理であれば、
AfxMessageBox("テスト");
のようにすれば良いと、どの解説書にも書いてあったのですが、私の環境ではこれが何故かコンパイルエラーになってしまいます。
型が一致しないとのことなので、
AfxMessageBox(LPCTSTR("テスト"));
とすればコンパイルが通るのですが、
文字列を直接ソース中で扱う際のこのLPCTSTRマクロは必須になったのでしょうか?
それが何か別の方法があるのでしょうか?
初心者で申し訳ございませんがご教授下さい。
VC++2005ではデフォルトでUnicodeモードになっており
Wide Charが使用されます。
従来のANSIバージョンを使用したい場合はプロジェクトの設定で
キャラクタコードの設定をMBCSに設定する必要があります。
Wide CharバージョンAPIはWin9x系では使用できませんが
WinNT系専用とし、そのままUnicodeモードで対応する場合は
_TマクロまたはTEXTマクロをご利用ください。
(Lマクロを使用するとあとでMBCSに変更するのが大変なので)
上のリンクは参考までに。
VC++2005は使ったことがないので上の解決法は分かりません。
ですが、ひとまずLPCTSTRはマクロではないはずです。あくまでLPCWSTRとLPSTRを環境によって切り替える働きを持っているデータ型ですので。
上の場合は、
AfxMessageBox( TEXT( "テスト" ) )
がいいかと思います。TEXTマクロは、文字列をコンパイル時にLPCTSTRに対応する文字型配列として解釈させるためのものです。
なるほど、TEXTマクロですね!大変参考になりました。ありがとうございます。
VC++2005ではデフォルトでUnicodeモードになっており
Wide Charが使用されます。
従来のANSIバージョンを使用したい場合はプロジェクトの設定で
キャラクタコードの設定をMBCSに設定する必要があります。
Wide CharバージョンAPIはWin9x系では使用できませんが
WinNT系専用とし、そのままUnicodeモードで対応する場合は
_TマクロまたはTEXTマクロをご利用ください。
(Lマクロを使用するとあとでMBCSに変更するのが大変なので)
なるほどですね、デフォルトでUnicodeが採用されているんですね。大変勉強になりました。
OSのバージョンにより違いがあると思うのですが、
文字列の扱いがShiftJISかunicodeかによって変わってくるはずです。
本来は、LPCTSTRにキャストしなければいけないものです。
初心者用の本はよく間違っていたり不正確なことが書いてあることがあるので注意してください。
ありがとうございます。確かに本によって書いてあることが全然違う事があるので困っています。ありがとうございました。
なるほどですね、デフォルトでUnicodeが採用されているんですね。大変勉強になりました。