|
Почему 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 |
|
Почему VBA размещает строки в обратном порядке?
|
|||
---|---|---|---|
#18+
ЦЦа проблемы выхода переменной из области видимости ... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2020, 16:27 |
|
Почему VBA размещает строки в обратном порядке?
|
|||
---|---|---|---|
#18+
Иван FXS, Вы более не настроены на решение задачи? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2020, 17:47 |
|
Почему VBA размещает строки в обратном порядке?
|
|||
---|---|---|---|
#18+
ЦЦа, во-первых, пост был не про "задачу", а про странное поведение VBA, которое видно через библиотечную функцию VarPtr. На эту тему никто мне ни слова не ответил, зато начали приводить примеры, как нужно правильно делать CopyMemory. Вот я и проговорился, что мне не нужно CopyMemory, а нужно ... вы читали. Ну и если человек (скажем, это были не вы) начинает с высказывания предположений, что у меня нет " представления о таком понятии как область видимости переменной ", ... не говоря уже об остальных высокомерных оборотах... то зачем это мне? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2020, 18:11 |
|
Почему VBA размещает строки в обратном порядке?
|
|||
---|---|---|---|
#18+
Кстати, статические переменные, имеющие "область видимости" только в пределах процедуры, в которой они объявлены, тоже имеют VarPtr (который, естественно, постоянен. Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
Код: plaintext 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2020, 18:32 |
|
Почему VBA размещает строки в обратном порядке?
|
|||
---|---|---|---|
#18+
Иван FXS ЦЦа, во-первых, пост был не про "задачу", а про странное поведение VBA, которое видно через библиотечную функцию VarPtr. На эту тему никто мне ни слова не ответил, Что касаеЦЦа эмоционального фона - просто игнорируйте не информацию . Да и сами не "подбрасывайте". Если это не являеЦЦа целью разговора, конечно. Иван FXS а нужно ... вы читали. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2020, 18:39 |
|
Почему VBA размещает строки в обратном порядке?
|
|||
---|---|---|---|
#18+
Иван FXS Кстати, статические переменные, имеющие "область видимости" только в пределах процедуры, в которой они объявлены, тоже имеют VarPtr (который, естественно, постоянен. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2020, 18:42 |
|
Почему VBA размещает строки в обратном порядке?
|
|||
---|---|---|---|
#18+
ЦЦа, это же персональный инструментарий, поскольку Святая Инквизиция запрещает Eolt 2. В VBA нельзя использовать VarPtr и StrPtr, это недокументированная функция, которая может не работать в другой версии Office И вы сами наверняка понимаете, какой функционал можно строить на указателях. Если набраться окаянства. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2020, 18:50 |
|
Почему VBA размещает строки в обратном порядке?
|
|||
---|---|---|---|
#18+
Иван FXS это же персональный инструментарий, поскольку Святая Инквизиция запрещает Eolt 2. В VBA нельзя использовать VarPtr и StrPtr, это недокументированная функция, которая может не работать в другой версии Office Святая Инквизиция не может быть святее Папы Римского, а Папа упорно суёт этот инструментарий в библиотеку VBA Офисов с 95-го по 2019 (для Windows), но в доступных в настоящее время официальных эдиктах прокололся лишь раз (насколько я смог найти). Поэтому, как ни странно, Инквизиция формально права. На практике же нет ничего более постоянного, чем временное, да и Папа не очень старался спрятать инструментарий, если уж по меньшей мере факт его существования доступен в Object Browser по выбору пункта контекстного меню "Show Hidden Members". Иван FXS И вы сами наверняка понимаете, какой функционал можно строить на указателях. Если набраться окаянства. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2020, 19:24 |
|
Почему VBA размещает строки в обратном порядке?
|
|||
---|---|---|---|
#18+
Иван FXS ЦЦа, это же персональный инструментарий, поскольку Святая Инквизиция запрещает Eolt 2. В VBA нельзя использовать VarPtr и StrPtr, это недокументированная функция, которая может не работать в другой версии Office ... Зачем пересказывать чужие глупости ? Какой вообще смысл задавать вопросы, если вы даже приблизительно не способны распознать каков смысл того, что вам сказали, потому не способны отличить откровенную чепуху от содержательных ответов. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2020, 20:20 |
|
Почему VBA размещает строки в обратном порядке?
|
|||
---|---|---|---|
#18+
Иван FXS ... И вы сами наверняка понимаете, какой функционал можно строить на указателях. Если набраться окаянства. И да, второй раз сообщаю вам, что для того, чтобы "строить функционал на указателях" copymemory вовсе не обязательно нужен. Совсем-совсем для начала, разберитесь с тем, что такое byref, который у вас есть по умолчанию, и чем он отличается от Byval. Без этого рановато про "вы сами понимаете". Форма лица должна соответствовать содержанию черепной коробки. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2020, 20:40 |
|
Почему VBA размещает строки в обратном порядке?
|
|||
---|---|---|---|
#18+
Иван FXS ЦЦа, во-первых, пост был не про "задачу", а про странное поведение VBA, которое видно через библиотечную функцию VarPtr. Нет никакого "странного поведения" VBA. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2020, 21:52 |
|
Почему VBA размещает строки в обратном порядке?
|
|||
---|---|---|---|
#18+
Иван FXS Кстати, статические переменные, имеющие "область видимости" только в пределах процедуры, в которой они объявлены, тоже имеют VarPtr (который, естественно, постоянен. Хватит уже нести бред! Переменная с модификатором Static - это глобальная переменная, доступ к которой возможен только из метода в котором она объявлена. Введена просто для удобства программирования. Учите матчасть наконец. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2020, 22:24 |
|
Почему VBA размещает строки в обратном порядке?
|
|||
---|---|---|---|
#18+
Eolt, это опять блямс, и опять неожиданный. чета крючит тебя к вечеру. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2020, 22:45 |
|
Почему VBA размещает строки в обратном порядке?
|
|||
---|---|---|---|
#18+
booby Eolt, это опять блямс, и опять неожиданный. чета крючит тебя к вечеру. В чем блямс? То что я справочник по VBA цитирую? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2020, 22:55 |
|
Почему VBA размещает строки в обратном порядке?
|
|||
---|---|---|---|
#18+
Eolt, "глобальная переменная" и "переменная глобального времени жизни" - не синонимы. первое означает именно видимость, доступность по обращению, а второе - способ выделения памяти под переменную. Переменная может независимо обладать обоими качествами. Для static перемененных "внутри процедуры" память выделяется не на стеке процедуры, что обеспечивает "глобальность" их времени жизни , но не глобальную видимость. PS Ты бы водички попил, что-ли, прежде чем "справочник цитировать"... Охолонись. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2020, 23:10 |
|
Почему VBA размещает строки в обратном порядке?
|
|||
---|---|---|---|
#18+
booby, Простите, я что должен открывать бесплатную школу для агрессивных недоучек? У меня как бы и своих дел достаточно... Что касается той глупости которую вы здесь написали, то все глобальные переменные в VB - статические. Собственно для иллюстрации достаточно этого примера: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29.
Переменная с модификатором Static - в VB/VBA глобальная (может быть прочитана и перезаписана из любого метода в коде), локальна она только на этапе компиляции кода. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2020, 23:23 |
|
Почему VBA размещает строки в обратном порядке?
|
|||
---|---|---|---|
#18+
Боюсь пример сверху слишком сложен будет. Нужно проще. Вот код: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
После компиляции видно, что глобальная переменная и "статическая" находятся рядом друг с другом в памяти. Это все потому, что с точки зрения виртуальной машины VB эти два типа равнозначны. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.09.2020, 00:01 |
|
Почему VBA размещает строки в обратном порядке?
|
|||
---|---|---|---|
#18+
Eolt, бросить бы тебе пить по ночам, прежде чем мечтать об открытии школы или "агрессивности самоучек". Мели что хочешь. Тебе можно. дружелюбный программист-исследователь ... |
|||
:
Нравится:
Не нравится:
|
|||
02.09.2020, 00:36 |
|
Почему VBA размещает строки в обратном порядке?
|
|||
---|---|---|---|
#18+
Eolt, Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.09.2020, 02:13 |
|
Почему VBA размещает строки в обратном порядке?
|
|||
---|---|---|---|
#18+
или даже так Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.09.2020, 02:38 |
|
|
start [/forum/topic.php?all=1&fid=60&tid=2154782]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
48ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
64ms |
get tp. blocked users: |
1ms |
others: | 261ms |
total: | 418ms |
0 / 0 |