![]() |
|
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
![]()
|
|
| DYUMON |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 321 Регистрация: 17.6.2006 Где: Новосибирск Репутация: нет Всего: 3 |
Хочу в библиотеку форму засунуть. Мне надо чтоб одно из окон в моей программе появлялось только при наличие этой библиотеки. Раньше такое не делал так что в непонятках
|
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 30 Всего: 484 |
И не делай.
Решение далеко от идеала. Наверняка твою задачу можно решить по другому. Не нужно решать задачу влоб. |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 16 Всего: 459 |
DYUMON, геморройно очень. Лучше тогда уж использовать bpl-ки. Dll-ки позволяют экспортировать только функции. Но с Bpl ками прийдется тащить еще весь набор стандартных Bpl ок, а точнее тех, чьи классы нужны.
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 16 Всего: 128 |
дык сделай проверку, если лежит опр.файл в директории с программой, то показываешь окно, иначе - не показываешь))) -------------------- There are always someone smarter than you... |
|||
|
||||
| DYUMON |
|
||||||||||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 321 Регистрация: 17.6.2006 Где: Новосибирск Репутация: нет Всего: 3 |
Как говорится Прежде чем спросить пороися в своих караманах.
Автор стать Horrific aka Флёнов Михаил все права на статью принадлежат ему. Начнём с создания DLL. Первое, что надо сделать, это создать соответствующий проект. Щёлки File->New. Перед тобой откроется уже знакомое окно создания проекта. Выбери пункт DLL и щёлкай "ОК" (рис. 1). Delphi создаст тебе пустой проект DLL файла. Выглядит он так:
В качестве информативных строк тебя предупреждают, что если ты будешь использовать динамические строки, то надо подключить в раздел uses модуль ShareMem. Я этот модуль не подключил, потому что для примера мы не будем использовать строки. Удаляй эти комментарии, чтобы они не мозолили твои глаза. Мы засунем в DLL файл одну лишь процедуру и одну форму, поэтому сейчас мы должны это описать:
Я добавил только одну строку exports ShowAbout index 10; . Что это означает? Ключевое слово export говорит о том, что я буду экспортировать процедуру или функцию. После этого идёт имя этой процедуры ShowAbout . Далее идёт ключевое слово index и число. Каждой процедуре, которую ты хочешь экспортировать ты должен назначить индекс или имя (можно и то и другое сразу). По этому индексу или имени программа будет вызывать экспортируемую функцию. Индексы и имена должны быть уникальными!!! Вот несколько примеров:
Через индексы функции вызываются быстрее, поэтому я использую их. Объявлять можно и так:
Но это всё примеры. У нас будет только ShowAbout с индексом 10. Logo Теперь щёлкаем File->New Form , чтобы создать новую форму. Нарисуй на ней что-нибудь, можно даже то, что сделал я (рис 2). Переходи в текст модуля. В разделе var, после объявления формы опиши процедуру ShowAbout:
Опять присутствует ключ export и добавлен ещё stdcall. Второй ключ говорит о том, что нужно использовать стандартный вызов. Теперь напишем саму функцию после implementation и ключа {$R *.DFM}:
Откомпилируй (Ctrl+F9) и DLL-файл готов. Можно закрывать этот проект (File->Close All) и создавать новый (File->New Application). В новом проекте переходим в текст формы и объявляем функцию ShowAbout:
Объявление происходит два раза. Первый раз после раздела uses и перед type нужно написать procedure ShowAbout(Handle: THandle)stdcall; . А второй раз в разделе var пишем procedure ShowAbout;external 'ProjectDLL.dll' index 10; . Здесь в кавычках стоит имя DLL файла. Пиши его полностью (вместе с расширением), потому что без расширения DLL будет не найдена в Windows NT. Обязательно соблюдай индексы и параметры процедуры. При втором объявлении параметры указывать не надо, только имя. Теперь ставим на форму кнопочку и пишем по её событию
Запускаем и наслаждаемся. Удачи тебе. |
||||||||||||||||
|
|||||||||||||||||
![]()
|
| Правила форума "Delphi: WinAPI и системное программирование" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |