Стоит Windows 8 Pro, Visual Studio 2010 Express Edition . |
Упаковка кода в статическую библиотеку Win32Lib
Лабораторная работа знакомит с методикой создания откомпилированных модулей программного обеспечения, готовых для подключения другими программистами в свои приложения. При этом компилируется только реализация функций или классов, которая находится в файлах с расширением .cpp.
Продукт, который выпускает программист - это может быть не только законченное приложение, а хорошо сконструированный и отлаженный программный модуль, способный решать определенную задачу в рамках приложения, разработанного другим программистом. Здесь нужно определиться с терминологией в данной лабораторной работе:
- Программист - лицо, разрабатывающее программный модуль и упаковывающее его в библиотеку Lib
- Пользователь - программист, использующий упакованный программный код Lib -библиотеки при разработке своих приложений
Существует несколько причин, по которым возникает необходимость распространять свои программные наработки не в открытом исходном коде, а в откомпилированном виде:
- Лицо, которое получит код, может вольно или невольно испортить его
- Программист хочет сохранить подробности решения задачи в тайне и тем самым обеспечить себе авторское право и контроль за возможностью внесения изменений
- Чтобы не компилировать хорошо разработанное одно и то же много раз
Вынесение части программного кода в самостоятельные модули-полуфабрикаты называется модульным программированием. Многие программисты специализируются не на создании исполнимых модулей, а на создании именно их модульных компонентов. Различают следующие форматы модулей программного обеспечения:
- DLL (Dynamic-Link Library) - динамически загружаемые библиотеки
- Элементы управления ActiveX. Они хранятся в файлах, имеющих расширение OCX
- Lib (Library) - статическая библиотека Win32
Поставщик программного модуля любого типа должен позаботиться о сопроводительной документации к распространяемому модулю. Включаемые заголовочные файлы для Lib -модуля также должны распространяться в открытом виде, чтобы пользователь имел возможность сообщить компилятору о спецификации Lib -кода, используемого в приложении и подключаемого позже линковщиком.
Рассмотрим создание Lib -модуля на простом примере моделирования круга. Для этого создадим свой класс круга, в котором предусмотрим минимальные возможности. Затем упакуем созданный код в Lib -библиотеку и построим тестовое приложение для проверки возможности подключения готового модуля круга.
Создание заготовки проекта типа Lib
- Перейдите в свой каталог выполнения лабораторной работы
- Выберите команды меню по созданию нового проекта
- Назовите проект Circle и выберите тип проекта Win32 Project
- После нажатия кнопки OK заполните окно мастера создания нового проекта так
- После создания мастером заготовки приложения установите режим Solution Configurations построения проекта в Release
На этом создание заготовки проекта CircleLib закончено. Обратите внимание на файл ресурсов. В нем ничего не содержится. Это правильно, поскольку весь остальной код программного модуля предстоит разработать самому программисту.
Далее мы создадим файлы Circle.cpp и Circle.h, в которых будет размещен программный код моделирования круга и из которых в дальнейшем создадим библиотечный файл.
Создание файлов Circle.cpp и Circle.h
- Выполните команду меню по добавлению в проект нового cpp-файла
- В окне мастера выберите настройку создания cpp-файла и задайте его имя Circle (удостоверьтесь, что текущим установлен каталог размещения вашего проекта)
- Щелкните по кнопке Open и удостоверьтесь, что к проекту добавился создаваемый файл
-
В текстовом редакторе созданного файла добавьте вначале пустого пока файла следующий код
Служебный заголовок к файлу Circle.cpp реализации класса CCircle ///////////////////////////////////////////////////////// // Circle.cpp // Copyright (C), разработал программист (студент) ФИО // Этот файл содержит реализацию класса CCircle // и используется для генерации библиотечного файла /////////////////////////////////////////////////////////
- Аналогичным образом создайте файл Circle.h, заполнив мастер так
-
В созданном файле Circle.h внесите служебную информацию о создателе будущего библиотечного файла
Внося свою информацию, имейте ввиду, что этот файл будет распространяться в исходном виде и помещать в него информацию с номером своей кредитной карточки или сумме на лицевом счете лучше не надо.
Служебный заголовок к файлу Circle.h спецификации класса CCircle ///////////////////////////////////////////////////////// // Circle.h // Copyright (C), разработал программист (студент) ФИО // Этот файл содержит спецификацию класса CCircle // и используется для генерации библиотечного файла // Распространяется вместе с библиотекой /////////////////////////////////////////////////////////
- Сохраните изменения в обеих файлах на диске
Теперь файлы Circle.cpp и Circle.h являются частью проекта.
Создание собственного класса CCircle и построение библиотеки
Создадим очень простой класс, который будет хранить переменную радиуса круга и несколько сервисов, позволяющих задать значение переменной, вернуть пользователю значение переменной, вычислить и вернуть значение площади круга. Создадим также конструктор с параметром радиуса по умолчанию и пустой деструктор.
-
Внесите в файл спецификации Circle.h и в файл реализации Circle.cpp следующий код
Файл Circle.h спецификации класса CCircle ///////////////////////////////////////////////////////// // Circle.h // Copyright (C), разработал программист (студент) ФИО // Этот файл содержит спецификацию класса CCircle // и используется для генерации библиотечного файла // Распространяется вместе с библиотекой ///////////////////////////////////////////////////////// #pragma once #include // MFC core and standard components class CCircle { private: int m_radius; public: // Конструктор/Деструктор CCircle(int r = 5){ m_radius = r;} ~CCircle(){} public: // Сервисы класса void SetRadius(int); int GetRadius(); float GetArea(); void DisplayArea(); };
Файл Circle.cpp реализации класса CCircle ///////////////////////////////////////////////////////// // Circle.cpp // Copyright (C), разработал программист (студент) ФИО // Этот файл содержит реализацию класса CCircle // и используется для генерации библиотечного файла ///////////////////////////////////////////////////////// #include "Circle.h" // Реализация сервисов класса CCircle void CCircle::SetRadius(int r) { m_radius = r; } int CCircle::GetRadius() { return m_radius; } float CCircle::GetArea() // Секретная формула { return (float)3.1415926538 * (float)m_radius * (float)m_radius; } void CCircle::DisplayArea() { float fArea = GetArea(); CString str; str.Format("Площадь круга равна: %f", fArea); AfxMessageBox(str); }
- Постройте проект, выполнив команду Build Solution или Build Circle из меню Build оболочки
- Войдите в каталог Release и убедитесь, что там создался файл Circle.lib