VoidPtr引数にString型を直接指定した場合

ActiveBasicのバグと思われる不具合を発見された方は、こちらから知らせていただけると助かります。
返信する
メッセージ
作成者
hira
記事: 203
登録日時: 2005年5月31日(火) 20:14
お住まい: 兵庫県
連絡する:

VoidPtr引数にString型を直接指定した場合

#1 投稿記事 by hira »

コード: 全て選択

#prompt
Sub test(p As VoidPtr)
	SetByte(p,&H30)
End Sub

Dim Buf As String
Buf="123"
test(Buf)
Print Buf
このコードで、Bufの内容が "123" のままになってしまいます。
いろいろ試してみたところ、VoidPtr型の変数にString型を代入しようとするとエラーになりますが、VoidPtr型の引数にString型を指定してもエラーになりません。
さらに、このとき関数側では渡された引数の値がおかしくなっていますが、ちゃんと "123" という文字列へのポインタを指していて、アクセス違反も起こりません。
これが仕様だとしても使う側が混乱するので(*Byteを使え、と言われるかもしれませんが、WriteFileやReadFileなどAPIに関しても同様のことがいえるようで、VoidPtr型に関してStrPtr関数は省略できるのかできないのかがはっきりしません)、このような例も正常に動くようにするか、あるいはエラーではじくようにしていただけないでしょうか?

Ver 4.21.00で以上の動作を確認。
返信する