Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
После имени функции стоит ключевое слово index и числовой индекс функции. Я люблю нумеровать свои функции, начиная с10. Этой я дал десятый индекс (ты можешь попробовать другое число. Индексы и имена должны быть уникальными!!! Вот несколько примеров:
exports Func1 index 10 name 'Fun', Func2 Insert, Func3 index 11, Func4 index 11,// Ошибка, такой индекс уже существует Func5 name 'Don';
В объявлении последней процедуры я явно использовал ключевое имя name, чтобы указать экспортной функции новое имя. Теперь внутри библиотеки эта функция реализована как Func5, но внешние приложения должны обращаться к ней по имени Don.
Объявлять можно и так:
exports Func1 index 10 name 'Fun', exports Func2 Insert, exports Func3 index 11,
Перекомпилируй проект, чтобы изменения вошли в силу (нажми Ctrl+F9).
Теперь возвращаемся в проект, где мы используем функцию. В разделе implementation подправляем описание нашей функции:
function Summ; external 'FirsDLLProject.dll' index 10;
Теперь вместо ключевого слова name стоит слово index и тот же номер.
Запусти проект и убедись, что он работает корректно.
На компакт диске, в директории \Примеры\Глава 18\IndexName ты можеш ь увидеть приме р это й программы.
18.3. Замечания по использованию библиотек.
огда я сказал, что DLL файлы нельзя запускать, то я и соврал, и нет. В принципе, библиотеки действительно нельзя запускать, но Delphi может сделать это. Открой нашу библиотеку и выбери из меню Run пункт
Parameters. Перед тобой откроется окно, как на рисунке 18.3.1.
В строке Host Application нужно указать имя приложения, которое умеет загружать библиотеку. Теперь попробуй запустить проект (клавиша F9). Запустить указанная программа.
Зачем нужен этот способ? Если ты попытался запустить программу, и она показала ошибку в коде, где вызывается функция из динамической библиотеки, то можно попытаться запустить библиотеку таким образом. Если снова произойдёт ошибка, то Delphi покажет строку с ошибкой.
Небного позже я покажу тебе, как можно отлаживать программы, выполнять их по шагам. Тогда ты сможешь узнать, что таким образом можно отлаживать и динамические библиотеки. А именно, они могут выполняться в пошаговом режиме (построчно) и ты будешь контролировать весь процесс выполнения.
Пока что я о библиотеках говорил достаточно много хорошего, но не сказал самого главного. Функции и процедуры из динамической библиотеки не могут прямо влиять на ход основной программы. Это значит, что мы не можем получить доступ к окнам основной программы, изменить какие-то переменные или ещё чего-нибудь.
Функции библиотеки – как бы изолированы от всего остального, хотя и выполняются в одном адресном пространстве с основной программой. Они могут использовать только переданные параметры, а результат работы возвращать в качестве результата работы функции.
Имена библиотек пиши полностью, вместе с расширением. Без расширения DLL может быть не найдена в Windows NT/2000/ХР, хотя в Windows 98 всё будет работать нормально.
Обязательно соблюдай индексы и параметры процедуры, иначе могут возникнуть ошибки. Лучше лишний раз проверить, чем потом долго искать опечатку.
18.4. Хранения формы в динамических библиотеках.
еперь я хочу показать, как можно хранить в динамических библиотеках целые окна. Очень удобно, когда редко используемые окна, находятся в динамической библиотеке. В этом случае основной файл очень сильно
разгружается от лишнего кода.
Ещё одно преимущество такого кода – библиотека может использовать для вывода информации на экран своё окно. Как я уже сказал, из dll файла нельзя получить доступ к переменным и данным основной программы. Это значит, что из DLL файла нельзя ничего вывести в окна основной программы. Но библиотека может создать собственное окно и использовать для вывода необходимых данных именно его.
Итак, создавай новую DLL библиотеку и сохрани её под именем ProjectDLL. Теперь добавим к нашей библиотеки одну экспортную процедуру ShowAbout:
Дата публикования: 2014-11-28; Прочитано: 216 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!