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


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

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



 

 

Программа 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; просмотров: 306; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.224.0.25 (0.007 с.)