技術情報
技術情報
1998年11月02日更新 

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が必要になります。
 それに対して、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) '文字列型変数への代入

Mail トップページへ戻る