まず
コード: 全て選択
Dim ByteArray(100) As Byte
こいつは、ByteArrayって名前のByte型配列を宣言してます。
ByteArrayに実際に入っている値は配列の先頭要素へのアドレス(ここではBytePtr型)で、
ByteArray(0)でByteArray配列の先頭の(0番目の)要素にアクセスできます。
配列の要素は、ここでは0~100まで使えるので要素数は101個ですね。
次に
コード: 全て選択
Sub GetTextBuffer(Byval lpByte As BytePtr)
についてです。
引数にByValの指定があるときは、その変数のオリジナルではなくコピーを関数内部で扱います。
ですので、例えばこの関数の中で
のようなコードを実行しても関数から出る時には無効化されてしまいます。
一方、引数にByRefの指定があるときは、オリジナルを関数内部で扱います。
ですので、例えばlpByteにByRefの指定があるとき、
のようなコードを実行すると、関数から出ても値が引き継がれます。
省略された時にはByValの指定がかかります。
次に
としていますが、これは実際にはByteArray配列の先頭の要素に0を代入しています。
なぜそんなことが可能になるかと言うと、まず
コード: 全て選択
GetTextBuffer(ByteArray)
と書いてあるように、ByteArray配列の先頭の要素へのアドレスを関数に投げています。
そして次に関数の定義
コード: 全て選択
Sub GetTextBuffer(ByVal lpByte As BytePtr)
により、lpByteに、関数に投げられたByteArray配列の先頭の要素へのアドレスが代入されます。
lpByteはByte型配列の先頭の要素へのアドレスを格納したポインタとしてこの関数内部で扱われることになります。
最後に
により、lpByteが指すアドレスを基点として0番目のアドレスに(つまりByteArray配列の先頭の要素に)、0が代入されます。
最後。
コード: 全て選択
Dim ByteArray(100) As Byte
で型にByteを使う理由は、現在ABでは文字コードにShift-JISを使用していて、
これは基本的に1バイト単位で記録する文字コードとなっています。
ですので、文字列を扱う場合には1バイト単位で扱うByte型やChar型を使う方が都合がいいんです。
(100)の部分は配列として宣言する為の指定ですね。