SAFEARRAY. Чё, правда? Подтвердите или наоборот...

Разговоры на любые темы: вы можете обсудить здесь какой-либо сайт, найти единомышленников или просто пообщаться...
GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

SAFEARRAY. Чё, правда? Подтвердите или наоборот...

Сообщение GSerg » 14.11.2004 (Вс) 13:24

Помните мои изыскания на тему SAFEARRAY?
Функцию ArrPtr тоже помните - которая на самом деле VarPtr переобъявленная?

Теперь запустите следующий код.
Код: Выделить всё
Private Sub Form_Load()
  Dim a(1 To 10) As Long
 
  Debug.Print "Несколько подряд"
  Debug.Print ArrPtr(a), ArrPtr(a), ArrPtr(a)
 
  Debug.Print

  Debug.Print "По одному"
  Debug.Print ArrPtr(a)
  Debug.Print ArrPtr(a)
  Debug.Print ArrPtr(a)
End Sub


Или запустите такой код:
Код: Выделить всё
Private Sub Form_Load()
  Dim a(1 To 10) As Long
 
  asd a, a, a
End Sub

Private Function asd(arr1() As Long, arr2() As Long, arr3() As Long) As Long
  Debug.Print ArrPtr(arr1)
  Debug.Print ArrPtr(arr2)
  Debug.Print ArrPtr(arr3)
End Function


Нужели и правда при передаче одного и того же массива несколько раз в одну и туже процедуру создаются-таки копии?
Передача ByVal, получается?
Я тихо офигеваю...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

gaidar
System Debugger
System Debugger
 
Сообщения: 3152
Зарегистрирован: 23.12.2001 (Вс) 13:22

Сообщение gaidar » 14.11.2004 (Вс) 13:58

А ты ByRef везде пропиши, на всякий случай :wink:
The difficult I’ll do right now. The impossible will take a little while. (c) US engineers in WWII
I don't always know what I'm talking about, but I know I'm right. (c) Muhammad Ali

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 14.11.2004 (Вс) 15:34

Я думаю, создаются копии дескрипторов, но не самих данных... Проверить сейчас возможности нет :-(
Изображение

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 15.11.2004 (Пн) 10:36

Вообще-то если в вызываемой функции изменение элемента массива изменяет его и в вызывающей (а это так и есть и легко проверяется), то копия массива явно не создается...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...


Вернуться в Народный треп

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 82

    TopList