
98年5月 最新動向セミナーレポート
Windows NT漢字処理技術協議会(XKP)による日本語処理の最新動向セミナーが、1998年5月25日に大東京火災新宿ビルで開催されました。
Windows NT 5.0における日本語処理について解説し、発表が待たれるSQL Server 7.0のUnicode対応などPCにおける日本語処理の展望を多彩なセッションとデモンストレーションを中心に紹介します。
Internet Explorer4.0とPower Pointをお使いの場合、当日の資料をすべて、ご覧いただけます。
XKP技術を利用した開発をするには
XKP技術を利用した開発を行うには二つの方法があります。UDCサーバーAPIもっとも基本的な、表示及び入力のAPIのみが提供されます。(厳密に言うと、入力はUDCサーバーを経由せず、直接IMM経由でXKP対応IMEを呼び出します)。開発には、UDCサーバーと共に提供されるxkpcore.libおよび、xkpcore2.hが必要になります。
- UDCサーバーAPIを呼び出す(C/C++言語等向き)
- OLE Controlを利用する(Visual BASIC/VBA向き)
それに対して、OLE Controlは、高レベルの機能、テキストボックス(エディットコントロール)、ラベル(スタティックコントロール)、リストボックス、コンボボックスを提供します。これらをフォーム上に貼り付けることで、開発を行います。XKP用モジュールを開発するには
XKP仕様書で規定された、UDCサーバー、OLE Control、XKP対応IMEは、誰でも自由に作ることができます。仕様書は、ダウンロードページより入手可能です。
UDCサーバーおよび、OLE Controlのサンプルソースコードは入手できます。OLE Controlはサブセットです。これらは、動作検証のために作られたもので、機能、性能などは実用的ではありません。開発の参考という位置づけでの提供になります。サンプルソースコードの入手を希望される場合は、事務局までお問い合わせ下さい。Visual BASIC/VBAでの利用ノウハウ
Q:VBでXKP文字を表示・入力・選択するには?
A:
XKP対応のOLE Controlをフォーム上に貼り付ければ、目的を達成できます。エディット(テキスト)、スタティック(ラベル)、リストボックス、コンボボックスの4種類の中から、適切なものを選んで貼り付けて下さい。
具体的にコントロール内に表示する文字列は、プログラムを記述して設定することになります。方法は次を参照して下さい。Q:VBでXKP文字を処理するには?
A:
XKP対応のOLE Controlは、文字列の受け渡し方法として、二つの手段をサポートしています。
一つは、文字列として受け渡す方法です。Unicode文字列の受け渡し能力を持ったコンテナなら利用できます。
もう一つは、Integer型16bit整数の配列として、文字列を受け渡し方法です。これを使えば、コンテナがシフトJIS文字しか扱えなくても、Unicode文字の受け渡しが可能になります。
VBの場合は、限定的にUnicode文字列を扱えますので、前者の方法が使えます。Q:文字列変数でのUnicode文字は?
A:
VBの文字列型変数は、Unicode文字を格納できます。
これを確認するには、ChrW関数でUnicodeの文字コードから文字を生成し、これを代入してみれば分かります。文字コードがきちんと保存されていることを確認するには、AscW関数を使います。
なお、ここで、ChrBまたじゃAscB関数を使ってはいけません。これらの関数は文字列をバイト単位で扱うとされていますが、実際には、シフトJISに変換してからバイト単位で切り分けているので、Unicode文字は確実に文字化けします。
Q:文字処理関数でのUnicode文字は?
A:
Midなど、VBに組み込まれた文字列処理関数は、Unicode文字列を適切に処理してくれます。Q:プロパティへの代入でのUnicode文字は?
A:
Unicode対応のOLE Controlを使わない限り、プロパティへの代入時に、シフトJISへの変換が行われます。そのため、フォームのCaptionなどに、XKP文字を代入することはできません。表示が文字化けするだけでなく、文字コードまで変わってしまいます。
Unicode対応のOLE Controlへの代入なら問題ありません。当然、XKP仕様のOLE Controlなら、問題ありません。
NG: Label1.Caption = ChrW(&h4e01) '標準Controlへの代入 OK: Static1.Caption = ChrW(&h4e01) 'XKP対応Controlへの代入 OK: Dim a As String: a = ChrW(&h4e01) '文字列型変数への代入
![]()
トップページへ戻る