Опять про массивы

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Matew
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 894
Зарегистрирован: 28.06.2004 (Пн) 17:44
Откуда: Дальний Восток, г. Ха

Опять про массивы

Сообщение Matew » 06.10.2004 (Ср) 5:34

Тут много писалось про CopyMemory Cut/GetMem4 или вроде того, а можно узнать описание функции CopyMemory и можно ли с помощью нее копировать Pointapi и многомерные (2-х, 3-х) массивы?

GM
programador
programador
 
Сообщения: 1427
Зарегистрирован: 24.06.2003 (Вт) 15:56
Откуда: 194.67.52.100

Сообщение GM » 06.10.2004 (Ср) 7:54

... можно узнать описание функции CopyMemory ...

Можно :)
The CopyMemory function copies a block of memory from one location to another.
Declaration
Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal ByteLen As Long)
Parameters
· Destination
Points to the starting address of the copied block’s destination.

· Source
Points to the starting address of the block of memory to copy.

· Length
Specifies the size, in bytes, of the block of memory to copy.

[/quote]
... и можно ли с помощью нее копировать Pointapi и многомерные (2-х, 3-х) массивы?
[/quote]

Код: Выделить всё
Dim src As POINTAPI, dest As POINTAPI
Call CopyMemory(dest, src, LenB(dest))
Dim arrSrc(1 To 10, 1 To 10) As Integer
Dim arrDest(1 To 10, 1 To 10) As Integer
Call CopyMemory(arrDest(1, 1), arrSrc(1, 1), 100)
الفيجوال بيسك الرابح

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

Re: Опять про массивы

Сообщение tyomitch » 06.10.2004 (Ср) 13:45

Matew писал(а):Тут много писалось про CopyMemory Cut/GetMem4 или вроде того, а можно узнать описание функции CopyMemory и можно ли с помощью нее копировать Pointapi и многомерные (2-х, 3-х) массивы?

CutMem4? :-D
Вырезает из памяти дырку в 4 байта?
Изображение

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 06.10.2004 (Ср) 15:20

Ага, для того, чтобы потом где-нибудь ее PasteMem4 или PasteSpecialMem4 :)
Lasciate ogni speranza, voi ch'entrate.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 06.10.2004 (Ср) 15:23

Только нужно делать это осторожно - в результате система памяти (MAT) может стать сильно фрагментированной...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Matew
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 894
Зарегистрирован: 28.06.2004 (Пн) 17:44
Откуда: Дальний Восток, г. Ха

Сообщение Matew » 08.10.2004 (Пт) 3:48

Call CopyMemory(arrDest(1, 1), arrSrc(1, 1), 100)
а как написать универсально, что бы не писать 100?
Алкоголь и сканеры-ваши враги! Не верите-смотрите аватару :-)

GM
programador
programador
 
Сообщения: 1427
Зарегистрирован: 24.06.2003 (Вт) 15:56
Откуда: 194.67.52.100

Сообщение GM » 08.10.2004 (Пт) 7:55

Call CopyMemory(arrDest(1, 1), arrSrc(1, 1), UBound(a, 1) * UBound(a, 2) * LenB(a(1, 1)))
Вообще то длина Integer 2 байта, так что должно быть 200.
الفيجوال بيسك الرابح

GM
programador
programador
 
Сообщения: 1427
Зарегистрирован: 24.06.2003 (Вт) 15:56
Откуда: 194.67.52.100

Сообщение GM » 08.10.2004 (Пт) 8:00

Сорри там вместо а должен быть arrSrc или arrDest.
الفيجوال بيسك الرابح

Matew
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 894
Зарегистрирован: 28.06.2004 (Пн) 17:44
Откуда: Дальний Восток, г. Ха

Сообщение Matew » 08.10.2004 (Пт) 8:46

Сэнькс
Алкоголь и сканеры-ваши враги! Не верите-смотрите аватару :-)

Matew
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 894
Зарегистрирован: 28.06.2004 (Пн) 17:44
Откуда: Дальний Восток, г. Ха

Сообщение Matew » 12.10.2004 (Вт) 9:40

Я боюсь экспериментировать с этой функцией подскажите как заменить вот это:
For i = 1 To aa
pt(i).x = arrS(5, 1, i)
pt(i).y = arrS(5, 2, i)
Next i
и наоборот:
For j = 1 To aa
arrS(5, 1, j) = pt1(j).x
arrS(5, 2, j) = pt1(j).y
Next j
Алкоголь и сканеры-ваши враги! Не верите-смотрите аватару :-)

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 12.10.2004 (Вт) 10:40

А вот здесь, мне кажется, придётся именно так.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

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

Сообщение tyomitch » 12.10.2004 (Вт) 10:46

Да, массивы хранятся вдоль первой компоненты...
Если бы было
Код: Выделить всё
For i = 1 To aa
pt(i).x = arrS(1, i, 5)
pt(i).y = arrS(2, i, 5)
Next i
- тогда можно бы было заменить.
Изображение

Matew
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 894
Зарегистрирован: 28.06.2004 (Пн) 17:44
Откуда: Дальний Восток, г. Ха

Сообщение Matew » 12.10.2004 (Вт) 12:29

Мне в принципе все равно-переделаю)))
Напишите, как...
Алкоголь и сканеры-ваши враги! Не верите-смотрите аватару :-)

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

Сообщение tyomitch » 12.10.2004 (Вт) 16:56

Matew писал(а):Мне в принципе все равно-переделаю)))
Напишите, как...
CopyMemory pt(1), arrS(1, 1, 5) , aa * LenB(pt(1))
Изображение


Вернуться в Visual Basic 1–6

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

Сейчас этот форум просматривают: Google-бот и гости: 2

    TopList