|
Почему VBA размещает строки в обратном порядке?
|
|||
---|---|---|---|
#18+
Есть какое-то объяснение и какая-то сермяжная правда в том, что VBA присваивает адреса строкам (то есть размещает их) в обратном порядке? Для Код: vbnet 1. 2. 3. 4. 5. 6. 7.
распечатка: 1373432 1373424 1373416 1373408 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2020, 08:29 |
|
Почему VBA размещает строки в обратном порядке?
|
|||
---|---|---|---|
#18+
Иван FXS, Адреса переменных могут располагаться в любом порядке. В зависимости от наличия свободной памяти ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2020, 10:04 |
|
Почему VBA размещает строки в обратном порядке?
|
|||
---|---|---|---|
#18+
Eolt, что такое "наличия свободной памяти" в момент (в процессе) компиляции VBA-кода MS-приложением (например, MS Access)& ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2020, 10:08 |
|
Почему VBA размещает строки в обратном порядке?
|
|||
---|---|---|---|
#18+
Иван FXS, То что как захочет интерпретатор VBA так и расположит их в памяти (на самом деле Windows у которой VBA запросит выделение памяти под строковую переменную, но сути дела это не меняет) И еще, описанный код в первом посте - ересь. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2020, 10:29 |
|
Почему VBA размещает строки в обратном порядке?
|
|||
---|---|---|---|
#18+
Eolt И еще, описанный код в первом посте - ересь ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2020, 10:36 |
|
Почему VBA размещает строки в обратном порядке?
|
|||
---|---|---|---|
#18+
Eolt захочет интерпретатор VBA Eolt а самом деле Windows у которой VBA запросит выделение памяти под строковую переменную ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2020, 10:39 |
|
Почему VBA размещает строки в обратном порядке?
|
|||
---|---|---|---|
#18+
Иван FXS Eolt И еще, описанный код в первом посте - ересь 1. Адреса BSTR строк берутся не через VarPtr, а с помощью StrPtr 2. В VBA нельзя использовать VarPtr и StrPtr, это недокументированная функция, которая может не работать в другой версии Office 3. Это точно не будет работать в 64-битной версии Office, код просто скрашится ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2020, 10:50 |
|
Почему VBA размещает строки в обратном порядке?
|
|||
---|---|---|---|
#18+
А собственно доступ к строкам через указатель StrPtr работает вот так: ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2020, 10:52 |
|
Почему VBA размещает строки в обратном порядке?
|
|||
---|---|---|---|
#18+
имхо, возможно автор получает не адрес объектов строки, а адреса указателей строк из стека, ну, а стек по понятным причинам растёт от старших адресов к младшим. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2020, 11:13 |
|
Почему VBA размещает строки в обратном порядке?
|
|||
---|---|---|---|
#18+
Иван FXS И вопрос поста не про то, есть ли какие-то соображения о том, почему интерпретатор VBA хочет именно так? Интерпретатор VBA ничего не хочет. Встретив объявление строковой переменной он вызывает SysAllocString и получает от операционной системы созданную строку в памяти. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2020, 11:27 |
|
Почему VBA размещает строки в обратном порядке?
|
|||
---|---|---|---|
#18+
Eolt, извините, я совсем чайник: вы утверждаете, что интерпретатор обращается к операционной системе за/для выделения памяти отдельно по поводу каждой переменной в тексте интерпретируемого кода? Я-то наивно думал, что интерпретатор "готовит" весь интерпретируемый проект в каком-то своём буфере, а потом ещё подключается ассемблер -- и только он уже размещает окончательный бинарный код в оперативной памяти... ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2020, 11:38 |
|
Почему VBA размещает строки в обратном порядке?
|
|||
---|---|---|---|
#18+
Иван FXS Eolt, извините, я совсем чайник: вы утверждаете, что интерпретатор обращается к операционной системе за/для выделения памяти отдельно по поводу каждой переменной в тексте интерпретируемого кода? Строки в VBA - это BSTR. А для создания BSTR строки в Windows используется функция SysAllocString. Соответственно на каждое объявление строки, VBA вызовет эту API функцию и получит созданную строку от операционной системы авторЯ-то наивно думал, что интерпретатор "готовит" весь интерпретируемый проект в каком-то своём буфере, а потом ещё подключается ассемблер -- и только он уже размещает окончательный бинарный код в оперативной памяти... VBA не компилируется в машинный код (это не VB6). При "компиляции" VBA строит AST-дерево, из которого потом генерирует байткод, который выполняется стековой машиной. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2020, 11:48 |
|
Почему VBA размещает строки в обратном порядке?
|
|||
---|---|---|---|
#18+
Сейчас проверил у себя в 2007 офисе, там VarPtr и StrPtr есть и даже работают как надо. Не знаю есть ли эти функции в последних версиях офиса. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2020, 12:29 |
|
Почему VBA размещает строки в обратном порядке?
|
|||
---|---|---|---|
#18+
Иван FXS ... а вы думаете, что 1373432, 1373424, 1373416 и 1373408 в моем примере -- это некие "адреса в памяти Windows"? Да, именно так. Но в твоем примере это адреса не самих строк, а переменных для них, выделенных компилятором в стеке для текущей процедуры. Адреса строк получают через strptr, полученное значение укажет на первый байт строки, сразу за лонгом его длины для копирования адресов строк из одной переменной в другую можно использовать трюки от Балена, ищи по "изоморфным интерфейсам", где-то пробегало здесь или в акцессе лет 10 - 12 назад... ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2020, 12:48 |
|
Почему VBA размещает строки в обратном порядке?
|
|||
---|---|---|---|
#18+
booby Но в твоем примере это адреса не самих строк, а переменных для них, выделенных компилятором в стеке для текущей процедуры booby для копирования адресов строк из одной переменной в другую А именно: есть у меня переменная S1, я в одном месте кода что-то такое про неё "запоминаю", а потом совершенно в другом месте кода хочу снова это про неё это "вспомнить". ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2020, 13:19 |
|
Почему VBA размещает строки в обратном порядке?
|
|||
---|---|---|---|
#18+
Иван FXS, Зачем тут указатели? Про структуры слышали? Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2020, 13:29 |
|
Почему VBA размещает строки в обратном порядке?
|
|||
---|---|---|---|
#18+
Eolt, я хочу иметь возможность делать это с переменными стандартных типов ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2020, 13:33 |
|
Почему VBA размещает строки в обратном порядке?
|
|||
---|---|---|---|
#18+
Иван FXS Eolt, я хочу иметь возможность делать это с переменными стандартных типов Какая собственно разница? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2020, 13:33 |
|
Почему VBA размещает строки в обратном порядке?
|
|||
---|---|---|---|
#18+
Иван FXS, Вы путайте такие понятия как переменная и объект. это совершенно разные вещи и хотите непонятно чего. для чего вам нужен адрес объекта\переменной, стало еще меньше понятно. создайте глобальный объект справочник и "запоминайте" по ключу строке то, что хотите запомнить, а потом "вспоминайте" это, где вам нужно адрес переменной существует только в области видимости самого метода, как только метод вернет управления можно считать, что её более не существует. а адрес объекта может в любой момент измениться по совершенно разным причинам или объект может быть освобожден и на его место будет записано, что угодно еще. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2020, 13:45 |
|
Почему VBA размещает строки в обратном порядке?
|
|||
---|---|---|---|
#18+
Roman Mejtes, можно я ещё раз повторю, что я хочу так финтить с переменными стандартных типов. Преобразовывать их в типизированные (а тем более в объекты) только для тог, чтобы на этапе отладки иметь возможность с ними "поразбираться" -- спасибо. _____________________ И да, я пишу не профессиональный и не коммерческий код, и поэтому позволяю себе "писать ересь". ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2020, 14:00 |
|
Почему VBA размещает строки в обратном порядке?
|
|||
---|---|---|---|
#18+
Как я понимаю автор хочет прикрутить к стандартным типам свой тег с информацией. Только зачем это нужно - непонятно. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2020, 14:04 |
|
Почему VBA размещает строки в обратном порядке?
|
|||
---|---|---|---|
#18+
Иван FXS booby Но в твоем примере это адреса не самих строк, а переменных для них, выделенных компилятором в стеке для текущей процедуры booby для копирования адресов строк из одной переменной в другую А именно: есть у меня переменная S1, я в одном месте кода что-то такое про неё "запоминаю", а потом совершенно в другом месте кода хочу снова это про неё это "вспомнить". Попробуйте русским языком, а не языком невменяемого бреда, изложить изумительные свои пожелалки. PS И да, у вас есть представление о таком понятии как "область видимости переменной"? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2020, 15:11 |
|
Почему VBA размещает строки в обратном порядке?
|
|||
---|---|---|---|
#18+
booby И да, у вас есть представление о таком понятии как "область видимости переменной"? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2020, 15:52 |
|
Почему VBA размещает строки в обратном порядке?
|
|||
---|---|---|---|
#18+
Иван FXS booby И да, у вас есть представление о таком понятии как "область видимости переменной"? Знаю. Докладываю, в данном конкретном случае, в опубликованном вами первом посте, это слово обозначает глупость обыкновенную, ничем не прикрытую. За остуствием у вас смысла в производимых вами дейстиях, внимание на мой пост можно не обращать. Всего доброго. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2020, 15:57 |
|
Почему VBA размещает строки в обратном порядке?
|
|||
---|---|---|---|
#18+
Иван FXS booby Но в твоем примере это адреса не самих строк, а переменных для них, выделенных компилятором в стеке для текущей процедуры booby для копирования адресов строк из одной переменной в другую А именно: есть у меня переменная S1, я в одном месте кода что-то такое про неё "запоминаю", а потом совершенно в другом месте кода хочу снова это про неё это "вспомнить". Что ЭТО должно было быть? Контейнер (map, collection) какой-то? Что в качестве ключа - имя переменной, ссылка на значение переменной с некой RTTI (хотя бы тип)? Вид "чего-то такого, что надо запомнить"? Осознание проблемы выхода переменной из области видимости, делающей (предполагаемые) ссылки весьма опасными "тыквами"? "... (наливает из графина): Жаль... Жаль, что нам так и не удалось послушать начальника транспортного цеха." ((c) Жванецкий) ... |
|||
:
Нравится:
Не нравится:
|
|||
31.08.2020, 13:17 |
|
|
start [/forum/topic.php?fid=60&msg=39993421&tid=2154782]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
47ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
others: | 283ms |
total: | 432ms |
0 / 0 |