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

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

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

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

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

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

Создавайте экземпляры этого класса там, где в нем есть необходимость.
...
Рейтинг: 0 / 0
Передать массив в класс по ссылке
    #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
Передать массив в класс по ссылке
    #35847472
AndreiNz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL_LamerСоздавайте экземпляры этого класса там, где в нем есть необходимость.
Если формы разные, то это и разные классы. Поэтому передать их в класс в одном и том же методе не получится.
...
Рейтинг: 0 / 0
Передать массив в класс по ссылке
    #35849424
Фотография SQL_Lamer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreiNzSQL_LamerСоздавайте экземпляры этого класса там, где в нем есть необходимость.
Если формы разные, то это и разные классы. Поэтому передать их в класс в одном и том же методе не получится.

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

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

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

Оно есть.

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


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