Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
shpora_ROD_pechat.doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
5.2 Mб
Скачать

2. Динамическая компоновка. Библиотеки dll. Создание динамической библиотеки

Динамически подсоединяемая библиотека (DLL - Dynamic-Link Library). DLL для компонента — сервер, или средство доставки. Компонент — это набор интерфейсов, которые реализованы в DLL. В свою очередь, интерфейс DLL — это набор функций, экспортируемых ею.

Задача динамической компоновки в модели COM разбивается на две подзадачи:

  1. Включение компонентов в DLL;

  2. Динамическое создание компонентов клиентом и использование последним интерфейсов, реализованных компонентом.

Создание динамической библиотеки включает следующие основные шаги:

  1. Разработку кода, реализующего компонент;

  2. Разработку функций, создающих необходимый компонент;

  3. Использование для этих функций спецификатора extern “C”, указывающего компилятору, чтобы тот не «довешивал» к имени функции информацию о типе функции.

  4. Создание файла DEF (имеющего расширение .def), указывающего компоновщику, какие функции экспортируются из создаваемой библиотеки.

  5. Компиляцию проекта с установленным конфигурационным типом Dynamic Library (.dll).

Разработка кода. С целью реализации компонента создаются файлы описания интерфейсов iface.h, определения компонента component.cpp, определения глобально уникальных идентификаторов интерфейсов и сервера guids.cpp, описания динамической библиотеки и экспортируемых из нее функций server.def.

Разработка функций. Примером описания функции, экспортируемой из динамической библиотеки, является

extern “C” IUnknown* CreateInstance() {

IUnknown* pI = (IUnknown*)(void*)new COMP;

pI->AddRef();

return pI;

}

Создание файла DEF. Главным содержимым файла с расширением .def является имя динамической библиотеки и состав экспортируемых из нее функций. Пример файла:

LIBRARY cmpnt0.dll

DESCRIPTION '(c) BNTU 2011 ROD'

EXPORTS

CreateInstance @1 PRIVATE

В строке LIBRARY указывается фактическое имя DLL. В разделе EXPORTS перечисляются экспортируемые из нее функции. При помощи программы dumpbin.exe можно получить листинг символов, экспортированных из DLL.

Задача - Привести пример графа распараллеленности операций и дать соответствующие определения

. Этот граф построен по графу непосредственного предшествования операций, рассмотренному ранее. Вершинами графа (их всего восемь) являются операции из множества N. Две вершины i, k соединены (не соединены) ребром, если соответствующие операции выполняются параллельно (последовательно) на графе предшествования операций. Две операции выполняются последовательно, если существует маршрут на графе предшествования, соединяющий одну вершину с другой, и выполняются параллельно, если маршрута не существует. Каждая i-я вершина графа метится двумя метками. Первая метка Ti является числовой и описывает время выполнения операции. Вторая метка является вектором bi=(bi1,…,bim), длина которого равна количеству m типов процессоров. Компонентом bij вектора является число процессоров типа j, необходимое для выполнения операции i. Например, вершина 1 метится вектором (1,0), следовательно, для операции 1 необходим один процессор первого типа и не требуется процессор второго типа.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]