Опубликован: 17.08.2010 | Доступ: свободный | Студентов: 1000 / 59 | Оценка: 4.11 / 3.89 | Длительность: 29:38:00
Самостоятельная работа 20:

Упаковка кода в статическую библиотеку Win32Lib

Аннотация: Создание заготовки проекта типа Lib. Создание файлов Circle.cpp и Circle.h. Создание собственного класса CCircle и построение библиотеки. Подключение библиотеки к проекту. Создание ассоциированных переменных для элементов управления. Добавление управляющего кода. Связывание кода с кнопкой "Выход". Связывание кода с кнопкой "Решить". Связывание кода с кнопкой "Показать". Запуск теста и оформление About.
Файлы к данной лабораторной работе, Вы можете скачать здесь.

Лабораторная работа знакомит с методикой создания откомпилированных модулей программного обеспечения, готовых для подключения другими программистами в свои приложения. При этом компилируется только реализация функций или классов, которая находится в файлах с расширением .cpp.

Продукт, который выпускает программист - это может быть не только законченное приложение, а хорошо сконструированный и отлаженный программный модуль, способный решать определенную задачу в рамках приложения, разработанного другим программистом. Здесь нужно определиться с терминологией в данной лабораторной работе:

  • Программист - лицо, разрабатывающее программный модуль и упаковывающее его в библиотеку Lib
  • Пользователь - программист, использующий упакованный программный код Lib -библиотеки при разработке своих приложений

Существует несколько причин, по которым возникает необходимость распространять свои программные наработки не в открытом исходном коде, а в откомпилированном виде:

  1. Лицо, которое получит код, может вольно или невольно испортить его
  2. Программист хочет сохранить подробности решения задачи в тайне и тем самым обеспечить себе авторское право и контроль за возможностью внесения изменений
  3. Чтобы не компилировать хорошо разработанное одно и то же много раз

Вынесение части программного кода в самостоятельные модули-полуфабрикаты называется модульным программированием. Многие программисты специализируются не на создании исполнимых модулей, а на создании именно их модульных компонентов. Различают следующие форматы модулей программного обеспечения:

  1. DLL (Dynamic-Link Library) - динамически загружаемые библиотеки
  2. Элементы управления ActiveX. Они хранятся в файлах, имеющих расширение OCX
  3. 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
Александр Даниленко
Александр Даниленко
Стоит Windows 8 Pro, Visual Studio 2010 Express Edition .