MultiByteToWideCharの宣言ミス?

ActiveBasicのバグと思われる不具合を発見された方は、こちらから知らせていただけると助かります。
返信する
メッセージ
作成者
くま次郎

MultiByteToWideCharの宣言ミス?

#1 投稿記事 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"にするべきではないのでしょうか?

私の勘違いでなかったらごめんなさい。
山本
Site Admin
記事: 535
登録日時: 2005年5月30日(月) 15:08
連絡する:

#2 投稿記事 by 山本 »

MultiByteToWideCharは通常のマルチバイト文字をUNICODEに変換する関数です。で、lpWideCharStr パラメータはUNICODE文字列へのポインタ(格納される側です)になります。

UNICODE文字列というのは、一文字が2バイト(Word)で表現されるため、WordPtrが正しい表現ということで大丈夫だと思います。
イグトランス
記事: 899
登録日時: 2005年5月31日(火) 17:59
お住まい: 東京都
連絡する:

#3 投稿記事 by イグトランス »

ちなみにVC .NetからはC++の規格どおりにwchar_tを基本型とするオプションが追加されています。
くま次郎

#4 投稿記事 by くま次郎 »

文字列=BytePtrをつかう、という固定観念があったため
勘違いをしてしまったみたいです。

どうも失礼しました。
マティ
記事: 161
登録日時: 2005年8月23日(火) 00:15
お住まい: 沖縄県
連絡する:

#5 投稿記事 by マティ »

ActiveBasicでサポートするunicodeは2バイト系のみだと理解してよろしいでしょうか?
3バイトとか4バイトの拡張コードもあるようなので、質問しました。
イグトランス
記事: 899
登録日時: 2005年5月31日(火) 17:59
お住まい: 東京都
連絡する:

#6 投稿記事 by イグトランス »

ActiveBasicがというよりもWindowsがUnicodeのエンコードにUTF-16を使用しているので,
それに従っているに過ぎないだけのはずです。

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