В данной теме публикуются последние версии кирпича, обсуждаются конкретные вопросы, сообщают о багах.
( Пожалуйста, заходите в эту тему хотя бы раз в месяц, если вы используете модуль в своих проектах, чтобы посмотреть, не вышла ли новая версия )
Последняя версия:
- Устаревшие версии:
Объявляется указатель так:
- Код: Выделить всё
[Private|Public] Declare {Sub|Function} <ИмяУказателя> Lib "*" ([аргументы]) [As ТипВозврата]
или так:
- Код: Выделить всё
[Private|Public] Declare {Sub|Function} <ИмяПсевдонимаУказателя> Lib "*" Alias "<ИмяУказателя>" ([аргументы]) [As ТипВозврата]
То есть в точности так, как обычная Declare Function, но вместо имени библиотеки вы указываете звёздочку (*).
Присваивание/получение значения указателю/указателя выполняется так:
- Код: Выделить всё
FuncPointer("<ИмяУказателя>") = <новое_значение>
<переменная> = FuncPointer("<ИмяУказателя>")
Вызов по указателю осуществляется с тем же синтаксисом, что и вызов обычной функции.
Поддержка таких указателей включается и выключается функцией MagicPointersOnOff.
В архиве содержится сам модуль и проект-пример его использования. Проект-пример состоит из трёх частей:
- Пример с Апплетами. Мы перебираем в папке «system32» все файлы с расширением «.cpl». Подгружаем каждый CPL-файл и вызываем с помощью указателя экспортируемую функцию CPlApplet. Через её вызов получается список диалогов, предоставляемых апплетами:
Пример демонстрирует, как с помощью указателей на функции работать с библиотеками-плагинами. - Пример с вызовом метода экземпляра класса. Метод созданного экзмемпляра класса вызывается через указатель, этому методу передаётся некоторое значение. Пример показывает возможность вызова через указатели не только Static-функций, но и методов классов (по механизму раннего связывания).
- Пример с операторами. Адреса двух функций (DoAdd, DoSub), у которых идентичные прототипы, присваиваются указателю MathOperator и выполняется вызов. Выводятся результаты сложения и вычитания одинаковых операндов.
- Пример с callback-ами. Делается вызов «чужой» процедуры, которой передаётся адрес «нашей» процедуры обратного вызова. Чужая процедура по переданному адресу делает вызов нашего callback'а, чтобы сообщить о каждом из найденных файлов. Показывает реализацию механизма callback-ов.
Примеры сделаны на скорую руку, наверняка я их переделаю.