Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.223.196.59] |
|
Сообщ.
#1
,
|
|
|
Всем привет.
Хочу разъяснить что такое строка в Visual Basic и как она работает. Как извесно, строки в VB хранятся в виде BSTR (о том что это, подробно написал ANDLL здесь) Формат весьма универсальный. Однако это не единственная фишка VB в строках. Если быть внимательным, то можно заметить, что для получения адресов переменных используется функция VarPtr, но только не для строковых. Для них испольуется StrPtr. Возникает 2 резонных вопроса: почему отдельная функция? и почему StrPtr и VarPtr возвращают разные знания? Всё дело в том, что строка в VB это всего-лишь 4 байта, являющиеся указателем на BSTR строку, причём не на её начало, а на данные (тоесть начало BSTR строки + 4 байта)! Вот так всё просто и универсально. Функция VarPtr возвращает адрес ячейки памяти, где лежит адрес BSTR строки + 4, а функция StrPtr возвращает число из этой ячейки. Да и функции StrPtr физически не существует На рисунке сделал визуализацияю для упрощения понимания Кстати появляется возможность быстрого "копирования" строки или создания строк, данные в которых будут общими. Прикреплённая картинка
|