>>143
VBの文字列というかBSTRはCの文字列と互換性があるように作られてる。
VBの文字列をWindows API(C言語ライブラリとも言える)に渡せるのはそのため

VBの文字列のアドレスはStrPtrで取得できるが、文字列のサイズ情報は
StrPtrで取得したポインタよりも "前" に記録されている。

さらにVBの文字列が終わった "後" のメモリ領域に2バイトの0x00が格納されている。
これはVB6の内部文字コードであるUNICODE(UTF16)のNULL文字

VBは文字列の中にNULL文字などを含められる(その為にサイズ情報が存在する)が
APIとの互換性のために文字列が終わった後のメモリに余分にNULL文字が記録されてる。

LenBは文字列のサイズ情報を返すだけ。(C言語のように実際にNULL文字が
見つかるまで数えているわけじゃないから速度が早い)

文字列のサイズ情報も、API互換性のための0x00 0x00も
文字列そのもの自体のメモリ領域よりも、外側に存在する。


参考
http://bytecomb.com/vba-internals-string-variables-and-pointers-in-depth/