Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Освобождение захваченных ресурсовСодержание книги
Поиск на нашем сайте
Программа MDIDEMO в функции WinMain использует функцию LoadMenu для загрузки трех меню, определенных в файле описания ресурсов. Обычно Windows удаляет меню, когда закрывается окно, к которому меню относится. Это касается и меню MdiMenuIni t. Однако, меню, не относящиеся к какому бы то ни было окну (программе MDIDEMO это меню Hello и Rect), будут продолжать занимать некоторую область памяти, даже после завершения программы. Поэтому, для освобождения памяти, занимаемой меню Hello и Rect, в программе MDIDEMO функция DestroyMenu в WinMain вызывается дважды.
Значение оконной процедуры
Большая часть того, что в Windows создано для поддержки многооконного интерфейса, заключено в классе окна MDICLIENT. В этом совершенно отчетливо проявляется сила объектной архитектуры Windows. Оконная процедура окна - служит, как бы, связующим звеном между главным окном и различными окнами документов.
ЛЕКЦИЯ 9. ДИНАМИЧЕСКИ ПОДКЛЮЧАЕМЫЕ БИБЛИОТЕКИ
Типы связывания
До сих пор мы использовали множество функций API для создания окон и оконных процедур, рисования, работы с клавиатурой и мышью, ввода-вывода. Все эти функции работали исправно и вы не задумывались над вопросом: где расположены эти функции и каким образом они подключаются к вашей программе. Все, что вам необходимо было сделать, это подключить соответствующий заголовочный файл (чаще всего это был < windows. h >) и вызвать необходимую функцию. Все остальные действия по включению функции в вашу программу среда программирования делала автоматически. Теперь пришла пора рассмотреть механизмы, обеспечивающие возможность использования функций.
Начнем с рассмотрения самого обыкновенного механизма использования функции, определенной в вашей программе. Например, вы создаете программу вычисления факториала и определяете внутри программы функцию, которая непосредственно этот факториал вычисляет:
#include "iostream.h"
// Функция вычисления факториала
int NFactorial(int N)
{
if (N==1) return 1
else return NFactorial(N-1) * N;
}
// Основная программа
int main()
{
cout<<NFactorial(3)<<endl;
return 0;
}
Таким образом, ваша функция расположена прямо в тексте программы. Процесс компиляции приведенной выше программы можно отобразить следующей схемой:
Файл factorial. cpp Файл factorial. obj Файл factorial. exe – 99 –
Рис.12.1 Компиляция программы со статическим связыванием первого вида
Приведенная на рисунке 12.1 схема отображает процесс статического связывания первого вида, когда функция расположена в самом тексте программы, при компиляции переводится в объектный код и помещается вместе с объектным кодом основной программы в один файл, который носит название объектного файла (*. obj). После этого, компоновщик (программа связи) создает *.ехе файл, в который включены все объектные части программы и эти части связаны между собой посредством адресации. Вы можете вынести функцию в отдельный текстовый файл, включив его в проект и объявив в файле-заголовке *. h.
Статическое связывание второго вида подразумевает использование в вашей программе функций, определенных в других файлах (библиотеках). Файлы-библиотеки как правило имеют расширение *. lib и подключаются к вашему исполняемому файлу (*. exe) только на этапе компиляции и связывания (Рис.2). Таким образом, они не компилируются заново, их объектный код (аналог файла *. obj) уже существует, и прикомпилируется к вашему файлу (*. obj) во время компиляции. Единственное, что необходимо сделать, это подключить нужный файл –заголовок (*. h) в текст программы.
Рис.12.2 Компиляция программы со статическим связыванием второго вида
И, наконец, вы имеете возможность использовать динамически подключаемые библиотеки (*. dll). Функции, находящиеся в них подключаются к вашему исполняемому файлу (*. exe) только в момент вызова, то есть в тот момент, когда программа выполняется и идет обращение к указанной функции. Таким образом, функция не компилируется вместе с вашей программой, не участвует в процессе связывания и не содержится в вашем *. exe файле!!! Такой подход имеет неоспоримые преимущества:
·Часто используемые функции хранятся в отдельных файлах. Например все функции API реализованы в DLL и поставляются вместе с операционной системой. Таким образом, все программы под Windows имеют возможность использовать одни и те же функции.
·Нет необходимости помещать все функции программы в *. exe файл. Их можно подгружать по мере надобности.
·Возможность использования новых версий функций (dll -файлов) без перекомпиляции исполняемых модулей (exe -файлов).
|
||||
Последнее изменение этой страницы: 2017-02-05; просмотров: 325; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.191.28.200 (0.006 с.) |