powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Почему VBA размещает строки в обратном порядке?
20 сообщений из 45, страница 2 из 2
Почему VBA размещает строки в обратном порядке?
    #39994546
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЦЦа
проблемы выхода переменной из области видимости
-- прикольная формулировка! Куда попадает переменная, выходя из области видимости?
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39994574
ЦЦа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Иван FXS,

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

во-первых, пост был не про "задачу", а про странное поведение VBA, которое видно через библиотечную функцию VarPtr. На эту тему никто мне ни слова не ответил, зато начали приводить примеры, как нужно правильно делать CopyMemory.

Вот я и проговорился, что мне не нужно CopyMemory, а нужно ... вы читали.

Ну и если человек (скажем, это были не вы) начинает с высказывания предположений, что у меня нет

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

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Private Declare Function VarPtrVaria Lib "msvbvm60" Alias "VarPtr" (Var As Any) As Long

Private Sub Print_Static_VariablesVarPtr_TESTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT()

Print_Static_Variables_VarPtr
Print_Static_Variables_VarPtr
Print_Static_Variables_VarPtr
Stop
End Sub

Public Sub Print_Static_Variables_VarPtr()

Static i As Integer, l As Long, x As Double, s As String
Debug.Print VarPtrVaria(i), VarPtrVaria(l), VarPtrVaria(x), VarPtrVaria(s)

End Sub



Код: plaintext
1.
2.
 349057428     349057432     349057436     1373276 
 349057428     349057432     349057436     1373276 
 349057428     349057432     349057436     1373276 
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39994602
ЦЦа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Иван FXS
ЦЦа,

во-первых, пост был не про "задачу", а про странное поведение VBA, которое видно через библиотечную функцию VarPtr. На эту тему никто мне ни слова не ответил,
Что касаеЦЦа начального вопроса, Вам ответили, что строки переменной длины в VB/VBA - это BSTR , и что локальные переменные в методах/процедурах выделяюЦЦа в (на) стеке, который растёт от больших адресов к меньшим, что и видно по результатам вызовов функции VarPtr() (зачем-то притащенной в VBA из run-time библиотеки VB, при наличии своей "родной"). Как по мне, вопрос закрыт, но если что-то не понятно, можем вернуЦЦа к нему.

Что касаеЦЦа эмоционального фона - просто игнорируйте не информацию . Да и сами не "подбрасывайте". Если это не являеЦЦа целью разговора, конечно.

Иван FXS
а нужно ... вы читали.
Вот я не понял, что нужно. Задаю вопросы, пытаюсь выяснить. И народ, КМК, вцепился в вопрос потому, что какая-то потенциально интересная идея мелькнула, но не факт, что действительно интересная, и, тем более, (красиво) реализуемая. Некое ожидание чуда, которое нехороший Иван FXS обманывает.
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39994603
ЦЦа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Иван FXS
Кстати, статические переменные, имеющие "область видимости" только в пределах процедуры, в которой они объявлены, тоже имеют VarPtr (который, естественно, постоянен.
Ясен перец. Место под них не выделяеЦЦа всякий раз при входе в процедуру и не освобождаеЦЦа при выходе.
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39994605
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЦЦа,

это же персональный инструментарий, поскольку Святая Инквизиция запрещает
Eolt
2. В VBA нельзя использовать VarPtr и StrPtr, это недокументированная функция, которая может не работать в другой версии Office


И вы сами наверняка понимаете, какой функционал можно строить на указателях. Если набраться окаянства.
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39994615
ЦЦа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Иван FXS
это же персональный инструментарий, поскольку Святая Инквизиция запрещает
Eolt
2. В VBA нельзя использовать VarPtr и StrPtr, это недокументированная функция, которая может не работать в другой версии Office
Возможно Святая Инквизиция имеет ввиду Office for Mac? (Сарказм, если что)
Святая Инквизиция не может быть святее Папы Римского, а Папа упорно суёт этот инструментарий в библиотеку VBA Офисов с 95-го по 2019 (для Windows), но в доступных в настоящее время официальных эдиктах прокололся лишь раз (насколько я смог найти). Поэтому, как ни странно, Инквизиция формально права. На практике же нет ничего более постоянного, чем временное, да и Папа не очень старался спрятать инструментарий, если уж по меньшей мере факт его существования доступен в Object Browser по выбору пункта контекстного меню "Show Hidden Members".

Иван FXS
И вы сами наверняка понимаете, какой функционал можно строить на указателях. Если набраться окаянства.
Даже боюсь предположить. Тем паче - в языке, который очень неглупые люди специально (в меру тогдашних технологических возможностей и маркетинговой политики) проектировали так, чтобы было как можно меньше небезопасных операций с указателями. А Вы секрет храните.
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39994628
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXS
ЦЦа,

это же персональный инструментарий, поскольку Святая Инквизиция запрещает
Eolt
2. В VBA нельзя использовать VarPtr и StrPtr, это недокументированная функция, которая может не работать в другой версии Office

...


Зачем пересказывать чужие глупости ?

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


И да, второй раз сообщаю вам, что для того, чтобы "строить функционал на указателях" copymemory вовсе не обязательно нужен.

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

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

во-первых, пост был не про "задачу", а про странное поведение VBA, которое видно через библиотечную функцию VarPtr.


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


Хватит уже нести бред! Переменная с модификатором Static - это глобальная переменная, доступ к которой возможен только из метода в котором она объявлена. Введена просто для удобства программирования. Учите матчасть наконец.
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39994652
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eolt,

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

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


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

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

Переменная может независимо обладать обоими качествами.
Для static перемененных "внутри процедуры" память выделяется не на стеке процедуры,
что обеспечивает "глобальность" их времени жизни , но не глобальную видимость.

PS
Ты бы водички попил, что-ли, прежде чем "справочник цитировать"...
Охолонись.
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39994657
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
Option Explicit
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
                  (ByVal lpDest As Any, ByVal lpSource As Any, ByVal cbCopy As Long)

Sub Main()
 
 Dim loc As String
 
 CopyMemory VarPtr(loc), StaticVarPtr, 4
 MsgBox "Содержимое переменной Var из метода StaticVarPtr: " & loc
 
 loc = ""
 
 CopyMemory VarPtr(loc), DimVarPtr, 4
 MsgBox "Содержимое переменной Var из метода DimVarPtr: " & loc

End Sub

Function StaticVarPtr() As Long
 Static var As String
 var = "Привет мир!"
 StaticVarPtr = VarPtr(var)
End Function

Function DimVarPtr() As Long
 Dim var As String
 var = "Привет мир!"
 DimVarPtr = VarPtr(var)
End Function



Переменная с модификатором Static - в VB/VBA глобальная (может быть прочитана и перезаписана из любого метода в коде), локальна она только на этапе компиляции кода.
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39994658
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Боюсь пример сверху слишком сложен будет. Нужно проще. Вот код:

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


Sub Main()
    Static StaticVar As Long
    Dim LocalVar As Long

    MsgBox _
      "Адрес глобальной  переменной: " & VarPtr(GlobalVar) & vbCrLf _
    & "Адрес статической переменной: " & VarPtr(StaticVar) & vbCrLf _
    & "Адрес локальной переменной:  " & VarPtr(LocalVar)

End Sub



После компиляции видно, что глобальная переменная и "статическая" находятся рядом друг с другом в памяти. Это все потому, что с точки зрения виртуальной машины VB эти два типа равнозначны.
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39994660
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eolt,

бросить бы тебе пить по ночам, прежде чем мечтать об открытии школы или "агрессивности самоучек".

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

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
                  (ByVal lpDest As Any, ByVal lpSource As Any, ByVal cbCopy As Long)
Sub Main()
    Dim LocalVar As Long
    
    Call Ne_nado_umnichati(VarPtr(LocalVar))

    MsgBox "LocalVar = " & LocalVar


End Sub

Sub Ne_nado_umnichati(ptr As Long)

    Dim xxxx As Long
    Let xxxx = 12345
    
    CopyMemory ptr, VarPtr(xxxx), 4
End Sub
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39994663
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
или даже так

Код: 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.
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
                  (ByVal lpDest As Any, ByVal lpSource As Any, ByVal cbCopy As Long)
Sub Main()
    Dim LocalVar As Long
    
    Dim mistika As Long
    Let mistika = 2 * VarPtr(LocalVar) + 54321
    
    Call Ne_nado_umnichati(mistika)


    MsgBox "LocalVar = " & LocalVar


End Sub

Sub Ne_nado_umnichati(ptr As Long)

    Dim xxxx As Long
    Let xxxx = 12345
    
    Dim mistika As Long
    Let mistika = (ptr - 54321) / 2
    
    CopyMemory mistika, VarPtr(xxxx), 4
End Sub
...
Рейтинг: 0 / 0
20 сообщений из 45, страница 2 из 2
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Почему VBA размещает строки в обратном порядке?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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