Страницы: 1
RSS
Работа с массивами и CopyMemory
 
Доброго времени суток!  
 
Часто при работе с массивами приходится копировать данные одного массива в другой. При этом, если объем данных достаточно большой, простой "перебор" элементов массива представляется малоэффективным инструментом. Для увеличения быстродействия программы в этом случае рекомендуется использование функции CopyMemory (например, здесь: http://www.microsoft.com/Rus/Msdn/Activ/MSVB/Archive/WindowsAPI/CopyMemory/171.mspx). Однако из представленного в Листинге4 примера неясно все же, каким образом, например, решить вот такую задачу. Имеется двумерный массив A, состоящий из 4 строк и 4 столбцов. Необходимо скопировать его содержимое в массив B, состоящий из 5 строк и 5 столбцов. Оставшиеся "вакантными" пятые строка и столбец в массиве B будут затем инициированы далее программно.  
 
Возможно ли реализовать это с помощью CopyMemory и как это сделать? Может быть, кто-нибудь сможет порекомендовать статьи на эту тему?  
 
Заранее признателен за комментарии!
 
А каким образом можно определять размер копируемых данных?.. Насколько я понимаю, можно каким-то образом использовать для этого функцию Len() (во всяком случае, в VB), однако в VBA у меня возникает ошибка ...
 
В VBA есть две функции определения размера массива:  
LBound(ИмяМассива)  
UBound(ИмяМассива)
 
"CopyMemory" в поиск.  
А -  
LBound(ИмяМассива)  
UBound(ИмяМассива)  
у массивов могут быть несколько измерений...  
С уважением, Сергей.
Я сам - дурнее всякого примера! ...
 
Дим, я в восторге. Как твой автоответчик обогнал... Шучу, привет:-)
Я сам - дурнее всякого примера! ...
 
Не это? http://www.planetaexcel.ru/forum.php?thread_id=20498
 
Да. Я именно об этом в:"CopyMemory" в поиск.  
Однако, к Эксель ИМХО, отношение...Но раз уж(сам использовал), пошла речь... Мое мнение - можешь  - делай - поможем. Вместо тебя делать - не хочу. Сделаю - достанешь меня(опыт есть). Дальнейшее на рассмотрение модеров. Дайте чуть повисеть  и удаляйте этот  пост. Прошу. Сергей.
Я сам - дурнее всякого примера! ...
 
Большое спасибо за ссылку на пример Стэна!  
Появилась отправная точка. :)  
 
Буду разбираться ...
 
память линейна..  
массивы хранятся по столбцам..  - первый столбец, сразу за ним второй..  
 
именно поэтому в redim preserve можно изменять только последнюю размерность..  
 
4x4 в 5х5  одним движением перенести не получится. можно по столбцам за 4 раза..
Живи и дай жить..
 
{quote}{login=Антон}{date=31.10.2010 09:50}{thema=}{post}А каким образом можно определять размер копируемых данных?.. Насколько я понимаю, можно каким-то образом использовать для этого функцию Len() (во всяком случае, в VB), однако в VBA у меня возникает ошибка ...{/post}{/quote}  
 
 
размерность массива умножить на размер элемента - см Data Type Summary (f1)
Живи и дай жить..
Страницы: 1
Читают тему
Наверх