powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Почему VBA размещает строки в обратном порядке?
25 сообщений из 45, страница 1 из 2
Почему VBA размещает строки в обратном порядке?
    #39993232
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть какое-то объяснение и какая-то сермяжная правда в том, что VBA присваивает адреса строкам (то есть размещает их) в обратном порядке?

Для
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
Private Declare Function VarPtrVaria Lib "msvbvm60" Alias "VarPtr" (Var As Any) As Long

Public s1 As String
Public s2 As String, s3 As String
Public s4 As String
........
Debug.Print VarPtrVaria(s1), VarPtrVaria(s2), VarPtrVaria(s3), VarPtrVaria(s4)



распечатка:
1373432 1373424 1373416 1373408
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39993267
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXS,

Адреса переменных могут располагаться в любом порядке. В зависимости от наличия свободной памяти
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39993271
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eolt,

что такое "наличия свободной памяти" в момент (в процессе) компиляции VBA-кода MS-приложением (например, MS Access)&
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39993288
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXS,

То что как захочет интерпретатор VBA так и расположит их в памяти (на самом деле Windows у которой VBA запросит выделение памяти под строковую переменную, но сути дела это не меняет)

И еще, описанный код в первом посте - ересь.
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39993297
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eolt
И еще, описанный код в первом посте - ересь
в смысле не кошерный?
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39993300
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eolt
захочет интерпретатор VBA
-- а вы думаете, что моё "VBA присваивает адреса" -- это не про интерпретатор? И вопрос поста не про то, есть ли какие-то соображения о том, почему интерпретатор VBA хочет именно так?
Eolt
а самом деле Windows у которой VBA запросит выделение памяти под строковую переменную
-- а вы думаете, что 1373432, 1373424, 1373416 и 1373408 в моем примере -- это некие "адреса в памяти Windows"?
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39993310
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXS
Eolt
И еще, описанный код в первом посте - ересь
в смысле не кошерный?


1. Адреса BSTR строк берутся не через VarPtr, а с помощью StrPtr
2. В VBA нельзя использовать VarPtr и StrPtr, это недокументированная функция, которая может не работать в другой версии Office
3. Это точно не будет работать в 64-битной версии Office, код просто скрашится
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39993311
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А собственно доступ к строкам через указатель StrPtr работает вот так:
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39993327
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
имхо, возможно автор получает не адрес объектов строки, а адреса указателей строк из стека, ну, а стек по понятным причинам растёт от старших адресов к младшим.
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39993339
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXS
И вопрос поста не про то, есть ли какие-то соображения о том, почему интерпретатор VBA хочет именно так?


Интерпретатор VBA ничего не хочет. Встретив объявление строковой переменной он вызывает SysAllocString и получает от операционной системы созданную строку в памяти.
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39993347
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eolt,

извините, я совсем чайник: вы утверждаете, что интерпретатор обращается к операционной системе за/для выделения памяти отдельно по поводу каждой переменной в тексте интерпретируемого кода?

Я-то наивно думал, что интерпретатор "готовит" весь интерпретируемый проект в каком-то своём буфере, а потом ещё подключается ассемблер -- и только он уже размещает окончательный бинарный код в оперативной памяти...
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39993357
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXS
Eolt,

извините, я совсем чайник: вы утверждаете, что интерпретатор обращается к операционной системе за/для выделения памяти отдельно по поводу каждой переменной в тексте интерпретируемого кода?


Строки в VBA - это BSTR. А для создания BSTR строки в Windows используется функция SysAllocString. Соответственно на каждое объявление строки, VBA вызовет эту API функцию и получит созданную строку от операционной системы


авторЯ-то наивно думал, что интерпретатор "готовит" весь интерпретируемый проект в каком-то своём буфере, а потом ещё подключается ассемблер -- и только он уже размещает окончательный бинарный код в оперативной памяти...

VBA не компилируется в машинный код (это не VB6). При "компиляции" VBA строит AST-дерево, из которого потом генерирует байткод, который выполняется стековой машиной.
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39993390
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сейчас проверил у себя в 2007 офисе, там VarPtr и StrPtr есть и даже работают как надо.
Не знаю есть ли эти функции в последних версиях офиса.
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39993402
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXS
... а вы думаете, что 1373432, 1373424, 1373416 и 1373408 в моем примере -- это некие "адреса в памяти Windows"?

Да, именно так.
Но в твоем примере это адреса не самих строк, а переменных для них, выделенных компилятором в стеке для текущей процедуры.
Адреса строк получают через strptr, полученное значение укажет на первый байт строки, сразу за лонгом его длины

для копирования адресов строк из одной переменной в другую можно использовать трюки от Балена, ищи по "изоморфным интерфейсам", где-то пробегало здесь или в акцессе лет 10 - 12 назад...
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39993414
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby
Но в твоем примере это адреса не самих строк, а переменных для них, выделенных компилятором в стеке для текущей процедуры
-- собственно меня и интересуют не сами строки и не "адреса самих строк", а идентификаторы переменных, которые можно было бы хранить отдельно от них ... зато вместе с некоторым "контекстами", накапливаемыми по поводу этих переменны.

booby
для копирования адресов строк из одной переменной в другую
-- честно говоря не очень понимаю, что здесь написано, но вроде бы это не то, что я хотел бы делать.

А именно: есть у меня переменная S1, я в одном месте кода что-то такое про неё "запоминаю", а потом совершенно в другом месте кода хочу снова это про неё это "вспомнить".
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39993421
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXS,

Зачем тут указатели? Про структуры слышали?

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Option Explicit

Type Vars
   Value   As String
   Info As String
End Type

Sub Main()

 Dim S1 As Vars

  S1.Value = "Содержимое перемеенной"
  S1.Info = "Информация о переменной"

End Sub
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39993423
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eolt,

я хочу иметь возможность делать это с переменными стандартных типов
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39993424
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXS
Eolt,

я хочу иметь возможность делать это с переменными стандартных типов


Какая собственно разница?
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39993431
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXS,

Вы путайте такие понятия как переменная и объект. это совершенно разные вещи и хотите непонятно чего.
для чего вам нужен адрес объекта\переменной, стало еще меньше понятно.
создайте глобальный объект справочник и "запоминайте" по ключу строке то, что хотите запомнить, а потом "вспоминайте" это, где вам нужно
адрес переменной существует только в области видимости самого метода, как только метод вернет управления можно считать, что её более не существует. а адрес объекта может в любой момент измениться по совершенно разным причинам или объект может быть освобожден и на его место будет записано, что угодно еще.
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39993442
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtes,

можно я ещё раз повторю, что я хочу так финтить с переменными стандартных типов. Преобразовывать их в типизированные (а тем более в объекты) только для тог, чтобы на этапе отладки иметь возможность с ними "поразбираться" -- спасибо.
_____________________

И да, я пишу не профессиональный и не коммерческий код, и поэтому позволяю себе "писать ересь".
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39993443
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как я понимаю автор хочет прикрутить к стандартным типам свой тег с информацией.
Только зачем это нужно - непонятно.
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39993474
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXS
booby
Но в твоем примере это адреса не самих строк, а переменных для них, выделенных компилятором в стеке для текущей процедуры
-- собственно меня и интересуют не сами строки и не "адреса самих строк", а идентификаторы переменных, которые можно было бы хранить отдельно от них ... зато вместе с некоторым "контекстами", накапливаемыми по поводу этих переменны.

booby
для копирования адресов строк из одной переменной в другую
-- честно говоря не очень понимаю, что здесь написано, но вроде бы это не то, что я хотел бы делать.

А именно: есть у меня переменная S1, я в одном месте кода что-то такое про неё "запоминаю", а потом совершенно в другом месте кода хочу снова это про неё это "вспомнить".


Попробуйте русским языком, а не языком невменяемого бреда, изложить изумительные свои пожелалки.

PS
И да, у вас есть представление о таком понятии как "область видимости переменной"?
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39993493
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby
И да, у вас есть представление о таком понятии как "область видимости переменной"?
-- вот я ведь у вас не спрашиваю, знаете ли вы, что означает слово "Public" в посте, правда?
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39993497
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXS
booby
И да, у вас есть представление о таком понятии как "область видимости переменной"?
-- вот я ведь у вас не спрашиваю, знаете ли вы, что означает слово "Public" в посте, правда?

Знаю.

Докладываю, в данном конкретном случае, в опубликованном вами первом посте,
это слово обозначает глупость обыкновенную, ничем не прикрытую.

За остуствием у вас смысла в производимых вами дейстиях, внимание на мой пост можно не обращать.

Всего доброго.
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39994100
ЦЦа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Иван FXS
booby
Но в твоем примере это адреса не самих строк, а переменных для них, выделенных компилятором в стеке для текущей процедуры
-- собственно меня и интересуют не сами строки и не "адреса самих строк", а идентификаторы переменных, которые можно было бы хранить отдельно от них ... зато вместе с некоторым "контекстами", накапливаемыми по поводу этих переменны.

booby
для копирования адресов строк из одной переменной в другую
-- честно говоря не очень понимаю, что здесь написано, но вроде бы это не то, что я хотел бы делать.

А именно: есть у меня переменная S1, я в одном месте кода что-то такое про неё "запоминаю", а потом совершенно в другом месте кода хочу снова это про неё это "вспомнить".

Что ЭТО должно было быть? Контейнер (map, collection) какой-то? Что в качестве ключа - имя переменной, ссылка на значение переменной с некой RTTI (хотя бы тип)? Вид "чего-то такого, что надо запомнить"? Осознание проблемы выхода переменной из области видимости, делающей (предполагаемые) ссылки весьма опасными "тыквами"?

"... (наливает из графина): Жаль... Жаль, что нам так и не удалось послушать начальника транспортного цеха." ((c) Жванецкий)
...
Рейтинг: 0 / 0
25 сообщений из 45, страница 1 из 2
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Почему VBA размещает строки в обратном порядке?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]