Возврат функцией по указателю25.09.2023, 09:03. Показов 2743. Ответов 29
Метки нет (Все метки)
Когда-то видел подобный вопрос и с тех пор как-то озадачился, так бы може х.з. Функции VB предназначены возвращать результат только по значению. Проведем небольшое исследование.
Добавлено через 1 час 28 минут Есть такая идея, что в переменой функции по умолчанию проинициализированая пустая строка и после смены указателя надо эту строку удалить с помощью heapfree или еще как и вылета не будет. Проверить пока не могу пишу с телефона Добавлено через 4 часа 52 минуты Идея плохая была, но есть есче одна, всвязи с чем вопрос, можно ли с помощью win-hex найти указатель на основную епеременную функции? Добавлено через 1 минуту Чтобы понять ее смещение относительно стека и др.
0
|
|||||||||||
| 25.09.2023, 09:03 | |
|
Ответы с готовыми решениями:
29
Возврат строки из функции по указателю Проблемка с функцией пользователя и передачей параметров по указателю
|
| 02.10.2023, 02:36 [ТС] | |||
|
0
|
|||
| 02.10.2023, 06:50 [ТС] | ||||||
|
Причем баг не распространяется на массив, расположенный внутри типа.. То беж если функции задать тип UDT с дин. массивом внутри, то нет глюка с неосвободившейся памятью по завершению процедуры. Но появляется другой минус - нет автоматической передачи данных по ссылке, как в этом случае.
0
|
||||||
| 05.10.2023, 17:39 [ТС] | ||||||
|
Есть еще один своеобразный момент, связаный с функциями, замеченый ранее, когда также пытался что-то бодяжить с функциями. Не знаю, если в этом, что-то интересное или практическое, но дело вот в чем. Если взят функцию заданную как массив и попытаться обратиться к элементу массива (закомментированая строчка), то выдаст ошибку. Если добавить еще пустые скобочки, то ошибки не бует, просто реверсивный вызов до
0
|
||||||
| 07.10.2023, 13:29 [ТС] | ||||||||||||
Я хотел проверить, можно ли ускорить таким образом левый Mid, т.е. передавать ему не переменную, а вывод другой функции, но обнаружилась проблема, с тем, что ссылку-то можно передать Mid-у, но он ее сожрет. Левая функция стирает любые данные, которые ей передают справа при заершении. Чтобы левая функция не съедала данные, нужно освобождать указатель переданной ссылки. С Mid конено ни чего не сделать, нутрь его не залесть. Если говорить о Property, то, допустим если надо передать (приспичило) переменную по ссылке в левую функцию (Let). Для этого добаим функцию, которая возвращает строку с указателем на те же данные, что и у аргумента (GetStrLink). Дополнительно в Property Let нужно добавить освобождение указателя, чтобы левая функция не затерла данные по этому указателю.
0
|
||||||||||||
| 08.10.2023, 04:38 [ТС] | ||||||
|
"И ты LSet?!"
![]() Грустная правда, LSet тоже копирует и уничтожает данные, а ведь все могло быть быстрее, будь это простые функции с byref аргументами..
0
|
||||||
| 10.10.2023, 05:02 [ТС] | |||||||||||
|
Пару слов о присвоении разных типов, при которых происходит автоматическая конвертация. В vba можно получить массив с листа Excel в переменную типа вариант, либо в массив типа вариант. При копировании с листа 300 мб массива вот что происходит в том и др. случае.
Кликните здесь для просмотра всего текста
Как видно, в вариант копиурется быстрее. При получении данных в массив со скобочками происходит конвертация с дополнительным копированием, хотя фактически можно было бы лишь переместить ссылку на массив из варианта в переменную массива.
0
|
|||||||||||
| 20.11.2023, 10:22 | ||
|
0
|
||
|
Модератор
|
|
| 20.11.2023, 10:27 | |
|
Копирование в Variant массива быстрее, но и доступ к элементам в этом случае медленней. Копирование в массив Variant'ов медленнее, но и доступ во много раз быстрее. В одном случае проверяется содержится ли в Variantе массив, и если содержится то получается доступ к этому массив каждый раз когда идёт обращение к элементу из массива. Массив типа Variant - это уже сам по себе SafeArray массив и доступ осуществляется также быстро как и к обычному массиву.
1
|
|
| 20.11.2023, 10:45 | |
|
The trick, всё правильно, только доступ медленнее совсем незначительно и, если с данными предстоит серьёзная работа (например, со строками), то обязательно нужно пересобрать в массив нужного типа
0
|
|
| 20.11.2023, 15:49 [ТС] | ||||||
|
Jack Famous, в общем вывод я сделал такой, что технически более правильно получать массив с листа в вариантную переменную, поскольку при этом не происходит преобразования и повторного копирования мссива. А после этого можно переместить ссылку на массив в переменную типа массив. С CopyMemory это будет выглядеть так. (однако учитывая медлительность CopyMemory в x64 vba пример не очень хороший).
1
|
||||||
| 20.11.2023, 15:49 | |
|
Возврат значения функцией Возврат функцией указателя на функцию
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Транслитерация текста с кириллицы на латиницу (вариант №2)
Maks 13.11.2026
Обновленная версия ранее созданной обработки.
Добавлено:
- Проверка исходного текста на кириллицу, через обращение к стандартной функции "ТолькоКириллицаВСтроке" из общего модуля. . .
|
Часы с термометром и праздничным календарем
yariko 12.11.2026
Сегодня мы рассмотрим как можно сделать отличные многофункциональные часы.
Итак, поставим конкретную задачу: разработать часы с календарем, двумя термодатчиками, выводом поздравительных сообщений. . .
|
Транслитерация текста с кириллицы на латиницу (вариант №1)
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
|
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version
1. 2003 - 06 - Designing Virtual Worlds (1st Edition)
Автор: Richard A. Bartle | Объем: 768 стр.
Ссылки: Amazon
. . .
|
|
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
|
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы.
Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
|
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version
Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
|
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров".
Задача:
Запрет инициалов.
Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
|