投稿日 | : 2005/01/27(Thu) 11:59 |
投稿者 | : 魔界の仮面弁士 |
Eメール | : |
URL | : |
タイトル | : Re: RtlMoveMemoryの振る舞い |
> 基本的にVBのString型はユニコードだと思ってますが、
VB6のUnicodeは、UCS-2/UTF-16 で表現されていますね。
(ちなみに VB.NET では、UTF-8 がベースになっているようです)
> このあたりは、皆さんはVBまかせにしているのでしょうか?
私は、ほとんどをVBに任せています。
APIでUnicodeを扱いたいなら、「String」ではなく、「Byte配列」を使って、
Declare Sub UnicodeProc Lib "dllname" (ByRef X As Byte)
Dim B() As Byte
B = "あいうえお"
Call UnicodeProc(B(0))
のようにすれば、そのまま渡せますしね。
> 私としてはAPIでString型を使う時はユニコードとして振舞ってもらうほうが
> ありがたいのですが、日本語文字の2バイトも含めて。
Unicodeで渡されないのは、ある程度の理由があります。
今では、殆どのOSが NTベースのもの(NT4, 2000, XP, 2003, ……)に
なっていますが、以前は、いわゆる9x系のOS(95, 98, Me)が非常に
多く使われていました。
そして9x系では、Unicode対応のAPIは僅かしかありません。
ほとんどのAPIがANSI版のみです。(SendMessageAとか)
一方のNT系では、UnicodeエントリとANSIエントリの両方を持っていますので、
API操作に関しては、ANSI版にあわせた設計の方が都合が良かったそうです。
# なお、VB.NET では、"Auto"キーワードによって、Unicode版/ANSI版の
# いずれを使うべきか、自動判定する機構が設けられています。