VBプログラマ質問スレ(Ver.6.0 まで) part64
■ このスレッドは過去ログ倉庫に格納されています
0151デフォルトの名無しさん
2014/06/21(土) 14:07:41.44ID:olAW34R3VBの文字列というか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/
■ このスレッドは過去ログ倉庫に格納されています