VB6.0用掲示板の過去のログ(No.2)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [管理用]

投稿日: 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版の
# いずれを使うべきか、自動判定する機構が設けられています。


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- VBレスキュー(花ちゃん) - - Web Forum -