トップページ > 過去ログ > 記事閲覧
Unicode文字について
名前:orz 日時: 2010/08/31 17:30

いつもDXライブラリ及び、本HPにはお世話になっております。 質問なのですが、バージョンが3.03になってから Load系の関数やString系の関数のchar型の引数は全てTCHAR型に変更されましたよね? それらは、_T()で囲むことで解決できるというのはわかったのですが(リファレンスページでは、未だにcharになっているので、意図したものかどうかもよくわかりませんが・・・)、Unicodeの定義が、いまいちわからず、外部からtxtを入力するようなプログラムの改変で躓いてしまいました。 サンプルプログラムのページの 6.サウンドノベル風文字列描画基本 のような例では、 日本語(マルチバイト文字?)の場合、 char oneMojiBuffer[3]を用意して OneMojiBuf[ 0 ] = String[ SP ][ CP ] ; OneMojiBuf[ 1 ] = String[ SP ][ CP + 1 ] ; OneMojiBuf[ 2 ] = '\0' ; とし、CP+=2;2バイト進め、 描画の際は DrawString( DrawPointX * MOJI_SIZE , rawPointY * MOJI_SIZE ,OneMojiBuf , GetColor( 255 , 255 , 255 ) ) ; のようにしています。 英文字の場合、 CP++; として、1バイト進めていますよね? UnicodeのTCHAR型を用いた場合は TCHAR String[ SP ][ CP ]={ //文字定義 } TCHAR OneMojiBuffとすれば 英文字、日本語関係なく、全て OneMojiBuff = String[ SP ][ CP ] ; CP++; DrawString( DrawPointX * MOJI_SIZE , rawPointY * MOJI_SIZE ,OneMojiBuff , GetColor( 255 , 255 , 255 ) ) ; で済むということでしょうか? 恐れ入りますが、もしよろしければご回答いただけると幸いです。 よろしくお願いいたします。

Page: 1 |

Re: Unicode文字について ( No.1 )
名前:いっち 日時:2010/08/31 19:35

> それらは、_T()で囲むことで解決できるというのはわかったのですが(リファレンスページでは、未だにcharになっているので、意図したものかどうかもよくわかりませんが・・・)、Unicodeの定義が、いまいちわからず、外部からtxtを入力するようなプログラムの改変で躓いてしまいました。 従来通りマルチバイト文字を使用することもできるので、既存のプログラムでは対応作業などは必要無いと思います。 > UnicodeのTCHAR型を用いた場合は > 〜 > で済むということでしょうか? 基本的にはその通りですが、DrawStringに渡す引数は文字列なので、たとえ1文字でも OneMojiBuff を配列にして、ヌル終端をつける必要があります。
Re: Unicode文字について ( No.2 )
名前:orz 日時:2010/08/31 21:32

ご回答有難うございます。 >従来通りマルチバイト文字を使用することもできる >ので、既存のプログラムでは対応作業などは必要無 >いと思います。 実は自分がリビルドすると以下のようなエラーメッセージが出ていました。 error C2664: 'DxLib::GetDrawFormatStringWidthToHandle' : 2 番目の引数を 'char []' から 'const TCHAR *' に変換できません。(新しい機能 ; ヘルプを参照) 1> 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。 まさかと思い、visual studioのプロジェクトのプロパティページの文字セットを確認したところ、 Unicodeになっておりました。 これをマルチバイト文字セットに変更したところ確かにエラーがなくなりました。 これでとりあえずは解決できましたが、根幹の部分はよく理解できず、若干、もやもやしております。 確か、TCHAR型はUnicodeの場合wchar型、そうでない場合、char型を取るということでしたが、 3.03になる前はUnicodeに設定されていてもchar型で問題なかったのですが、 これは3.03になり、TCHAR型になったことで、Unicodeに設定されている場合は、TCHAR型(またはwchar型?)でなければならず、 マルチバイトに設定されている場合は、 TCHAR型あるいはchar型でも大丈夫ということでしょうか? また、日本向けのソフトであれば、現段階ではマルチバイトの仕様で問題ないのでしょうか? 質問ばかりで申し訳ありません。 よろしければご回答いただけると幸いです。
Re: Unicode文字について ( No.3 )
名前:いっち 日時:2010/09/01 01:09

> 3.03になる前はUnicodeに設定されていてもchar型で問題なかったのですが、 > これは3.03になり、TCHAR型になったことで、Unicodeに設定されている場合は、TCHAR型(またはwchar型?)でなければならず、 > マルチバイトに設定されている場合は、 > TCHAR型あるいはchar型でも大丈夫ということでしょうか? おおむねそんな感じだと思います。 TCHARマクロや tchar.h で宣言されている関数などは、どちらの設定でもコンパイルや動作に支障が無いようなコードを書くためのものです。 どちらか専用のコードを書く場合は TCHARマクロを使わずに、wchar_t型や char型を直接使っても問題ないということだと思います。 > また、日本向けのソフトであれば、現段階ではマルチバイトの仕様で問題ないのでしょうか? 難しいところですが、個人レベルのWindows用ゲーム開発であれば問題無いと思います。
Re: Unicode文字について ( No.4 )
名前:orz 日時:2010/09/01 10:48

いっちさん ご回答有難うございます。 なんとなくわかりました! TCHAR型を用いた場合 Unicode→TCHAR型、wchar_t型 マルチバイト→TCHAR型、char型 可能な限り、TCHAR型を用いるべき。と言った感じですね。 ファイル入出力が伴うプログラムですと、 #ifdef UNICODE などとして、 Unicode用とマルチバイト用の両方を作る必要がありそうですね。 確か、Windowsの9x系はマルチバイト文字で、それ以降は内部的にはUnicodeになっているんでしたっけ・・・ でも今のところは、それ以降でもchar型を使用していても一応、動作しているところをみると、 今のところはマルチバイトの方がいいと思ってしまうのは、素人考えですかね・・・ 今回、文字コードについて少し知ることができました。ありがとうございます。

Page: 1 |