Освобождение захваченных ресурсов

 

 

Программа 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 -файлов).

 

 








Дата добавления: 2016-11-22; просмотров: 502;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.009 сек.