ページ 11

MultiByteToWideCharの宣言ミス?

Posted: 2005年11月16日(水) 04:19
by くま次郎
MultiByteToWideCharの定義に誤りがあるのではないでしょうか?

AB4.11には "api_system.sbp" にはこう宣言されていますが:

コード: 全て選択

Declare Function MultiByteToWideChar Lib "kernel32" (CodePage As DWord, dwFlags As DWord, lpMultiByteStr As BytePtr, cchMultiByte As Long, lpWideCharStr As WordPtr, cchWideChar As Long) As Long
「lpWideCharStr As WordPtr」は "WordPtr"ではなく
"BytePtr"にするべきではないのでしょうか?

私の勘違いでなかったらごめんなさい。

Posted: 2005年11月16日(水) 11:20
by 山本
MultiByteToWideCharは通常のマルチバイト文字をUNICODEに変換する関数です。で、lpWideCharStr パラメータはUNICODE文字列へのポインタ(格納される側です)になります。

UNICODE文字列というのは、一文字が2バイト(Word)で表現されるため、WordPtrが正しい表現ということで大丈夫だと思います。

Posted: 2005年11月16日(水) 20:16
by イグトランス
ちなみにVC .NetからはC++の規格どおりにwchar_tを基本型とするオプションが追加されています。

Posted: 2005年11月18日(金) 07:33
by くま次郎
文字列=BytePtrをつかう、という固定観念があったため
勘違いをしてしまったみたいです。

どうも失礼しました。

Posted: 2005年11月18日(金) 23:54
by マティ
ActiveBasicでサポートするunicodeは2バイト系のみだと理解してよろしいでしょうか?
3バイトとか4バイトの拡張コードもあるようなので、質問しました。

Posted: 2005年11月19日(土) 00:28
by イグトランス
ActiveBasicがというよりもWindowsがUnicodeのエンコードにUTF-16を使用しているので,
それに従っているに過ぎないだけのはずです。

ところでUCS2ではなく,UTF-16なのでサロゲートペアによって4Byteで1文字ということもありえます。