Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Передать массив в класс по ссылке / 9 сообщений из 9, страница 1 из 1
19.02.2009, 14:11
    #35827298
AndreiNz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать массив в класс по ссылке
Есть форма, которой около 10 лет и на которой несколько десятков тысяч строк кода. На ней есть массив
Код: plaintext
Dim iTemp() as Integer

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

Мой класс уже имеет копию подобного массива и есть свойства класса, предоставляющие доступ к нему. Но есть необходимость использовать как встроенный массив, так и внешний.
...
Рейтинг: 0 / 0
20.02.2009, 04:52
    #35828703
SQL_Lamer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать массив в класс по ссылке
AndreiNz,

Design pattern "visitor".
Там конечно ничего про массивы нет :)
Это просто даст вам понимание, как работать с экземплярами классов :)

По вашему же вопросу - объявите в классе, который работает с массивом переменную типа вызывающего класса, и из вызывающего класса передайте ссылку на самого себя.
...
Рейтинг: 0 / 0
21.02.2009, 04:18
    #35830788
AndreiNz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать массив в класс по ссылке
Я не совсем понял, при чем здесь экземпляры классов, но это не так важно.

Дело в том, что тот вариант, о котором вы говорите, я рассматривал. Беда в том, что форма не одна, а несколько и класс (объект этого класса, что бы не смущать вас) хотелось бы использовать на всех формах где в нем есть необходимость.
...
Рейтинг: 0 / 0
21.02.2009, 14:27
    #35831002
SQL_Lamer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать массив в класс по ссылке
AndreiNz
Дело в том, что тот вариант, о котором вы говорите, я рассматривал. Беда в том, что форма не одна, а несколько и класс (объект этого класса, что бы не смущать вас) хотелось бы использовать на всех формах где в нем есть необходимость.

Создавайте экземпляры этого класса там, где в нем есть необходимость.
...
Рейтинг: 0 / 0
03.03.2009, 08:43
    #35847419
AndreiNz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать массив в класс по ссылке
В конечном итоге сделал так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
...
Private m_iObjectArray () As Integer
...
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Private Declare Function VarPtrArray Lib "msvbvm50.dll" Alias "VarPtr" (Ptr() As Any) As Long
...
Public Sub SetArray(ByRef arr() As Integer)
Dim lngTemp As Long
   'CopyMemory ByVal VarPtrArray(m_iObjectArray()), ByVal VarPtrArray(arr()), 4&
CopyMemory ByVal VarPtr(lngTemp), ByVal VarPtrArray(m_iObjectArray ()),  4 &
CopyMemory ByVal VarPtrArray(m_iObjectArray ()), ByVal VarPtrArray(arr),  4 &
CopyMemory ByVal VarPtrArray(arr()), ByVal VarPtr(lngTemp),  4 &
End Sub

Если оставить только закомментированную строку, то вылетает VB. А так все работает. Тоесть класс использует внешний массив и манипулирует им вместо своего.

Основная идея взята здесь .
...
Рейтинг: 0 / 0
03.03.2009, 09:30
    #35847472
AndreiNz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать массив в класс по ссылке
SQL_LamerСоздавайте экземпляры этого класса там, где в нем есть необходимость.
Если формы разные, то это и разные классы. Поэтому передать их в класс в одном и том же методе не получится.
...
Рейтинг: 0 / 0
03.03.2009, 21:10
    #35849424
SQL_Lamer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать массив в класс по ссылке
AndreiNzSQL_LamerСоздавайте экземпляры этого класса там, где в нем есть необходимость.
Если формы разные, то это и разные классы. Поэтому передать их в класс в одном и том же методе не получится.

Конечно :)
Должен быть базовый класс, у которого есть массив, с которым вы хотите работать.
...
Рейтинг: 0 / 0
03.03.2009, 21:27
    #35849438
AndreiNz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать массив в класс по ссылке
Вот именно.

Тоесть вы предлагете пеоелопатить весь проект. А как там с наследованием в VB, чтобы использовать базовый класс?
...
Рейтинг: 0 / 0
03.03.2009, 21:30
    #35849440
SQL_Lamer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать массив в класс по ссылке
AndreiNzВот именно.

А как там с наследованием в VB, чтобы использовать базовый класс?

Оно есть.

Но если проект старый и большой, то смысла нету что то перелопачивать наверно.
Лишь бы работало.
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Передать массив в класс по ссылке / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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