VisualC++2008ExpressEditionを使って始めて、テスト的に簡単なWindowsフォームアプリを作ってみたが文字化けする。
色々と、やってみたが全角文字でない半角の文字も文字化けしている??
ヘルプやGoogleでグぐって見たが対処と原因が見つからない (・。・;
もう一度、VisualC++のビルドした後のIDE画面を良く見ると・・・・・???
その画面です。
(画像はクリックして大きくなります)
と、言うわけで原因は・・ 自動的にVisual C++内部でで指定されていると思われる。次の指定が悪さをしている事が分かった。
#define TextOut TextOutW
上の指定は 通常TextOut 関数が有ったら、それをWide文字用のTextOutWに置き換えてしまう指定です。
TextOutWはUNICODE文字を使う場合の関数です。
Ansi(S-Jis)を使った場合は、おかしくなって当たり前です。
さらに、画像内で、それに続く関数は置き換え出来ないと・・・?Σ(⌒◇⌒;) ゲッ!!
TextOutだけWide文字関数に置き換えて置いて、文字変数のLPCSTRは、ナンモせんのか!!、突っ込みたくなるわい
そこでコードの先頭にマクロ指定解除の #undef TextOutを追加したが指定のないマクロを解除しようとしていると出てエラーとなる。
結局対策としては 新たに以下の様に、コードの先頭部にマクロ指定でANSIコード関数のTextOutAを使うように指定しました。
#define TextOut TextOutA ← 警告が出るが大丈夫 ← (;・∀・)ダダイジョウブ・・・?
一般的に関数や変数の末尾に Wが付く物は WIDE文字関数(UNICODE) Aが付く物はANSI文字関数(S-JIS)と覚えていて下さい。
Microsoftは WindowsXPより文字コードを Unicodeへ変えて他のOSとの共通化を計っているのに逆行するようですが、取り敢えずは、良しとして、この設定でやって見ます。
他に良い方法などが有れば教えて頂ければ幸いです。
この記事で、日本語の文字化け対策として、ANSI(S-JIS)用にマクロ指定して対策したと書きましたが、VisualC++2008の設定で対策出来るのではないかと、色々と調べて見ましたら有りました。
返信削除自分が使い方を知らなかっただけだったのですね!! (^_^;)
詳しくは以下の6月25日投稿分を見て下さい!
http://honeys1980.blogspot.com/