АкушерствоАнатомияАнестезиологияВакцинопрофилактикаВалеологияВетеринарияГигиенаЗаболеванияИммунологияКардиологияНеврологияНефрологияОнкологияОториноларингологияОфтальмологияПаразитологияПедиатрияПервая помощьПсихиатрияПульмонологияРеанимацияРевматологияСтоматологияТерапияТоксикологияТравматологияУрологияФармакологияФармацевтикаФизиотерапияФтизиатрияХирургияЭндокринологияЭпидемиология

Реализация функций API с помощью внешних библиотек

Прочитайте:
  1. I. Психозы, развивающиеся вследствие внешних телесных повреждений
  2. IV. Исследование функций фагоцитов
  3. А. Воздействие внешних факторов.
  4. Активация ирригационного раствора с помощью ультразвука
  5. Алгоритм взятия крови из периферической вены с помощью вакуумной системы для забора венозной крови
  6. Алгоритм подсчета с помощью формул.
  7. АЛГОРИТМ ФИЗИЧЕСКОГО ОХЛАЖДЕНИЯ С ПОМОЩЬЮ ЛЬДА
  8. Анатомо-морфологическая база высших психических функций
  9. Анатомо-морфологическая база высших психических функций.
  10. АСПИРАЦИЯ СОДЕРЖИМОГО ДЫХАТЕЛЬНЫХ ПУТЕЙ С ПОМОЩЬЮ РЕЗИНОВОГО БАЛЛОНА И НОСОВОГО КАТЕТЕРА

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

Система программирования ответственна только за то, чтобы подключить объ­ектный код библиотеки к результирующей программе. Причем внешняя библио­тека может быть и динамически загружаемой (загружаемой во время выполне­ния программы).

С точки зрения эффективности выполнения этот метод реализации API имеет самые низкие результаты, поскольку внешняя библиотека обращается как к функ­циям ОС, так и к функциям RTL языка программирования. Только при очень высоком качестве внешней библиотеки ее эффективность становится сравнимой с библиотекой RTL.

Если говорить о переносимости исходного кода, то здесь требование только одно — используемая внешняя библиотека должна быть доступна в любой из архитек­тур вычислительных систем, на которые ориентирована прикладная программа. Тогда удается достигнуть переносимости. Это возможно, если используемая биб­лиотека удовлетворяет какому-то принятому стандарту, а система программиро­вания поддерживает этот стандарт.

Например, библиотеки, удовлетворяющие стандарту POSIX (см. следующий подраздел), доступны в большинстве систем программирования для языка С. И если прикладная программа использует только библиотеки этого стандарта, то ее исходный код будет переносимым. Еще одним примером является широко известная библиотека графического интерфейса XLib, поддерживающая стандарт графической среды X Window.

Для большинства специфических библиотек отдельных разработчиков это не так. Если пользователь использует какую-то библиотеку, то она ориентирована на ограниченный набор доступных архитектур целевой вычислительной системы. Примерами могут служить библиотеки MFC (Microsoft foundation classes) фир­мы Microsoft и VCL (visual controls library) фирмы Borland, жестко ориентиро­ванные на архитектуру ОС типа Windows.


Тем не менее многие фирмы-разработчики сейчас стремятся создать библиоте­ки, которые бы обеспечивали переносимость исходного кода приложений между различными архитектурами целевой вычислительной системы. Пока еще такие библиотеки не получили широкого распространения, но есть несколько попыток их реализации — например, библиотека CLX производства фирмы Borland ори­ентирована на архитектуру ОС типа Linux и ОС типа Windows.

^

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

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

Что касается прикладных программ, то гораздо большую перспективу для них предоставляют технологии, связанные с разработками в рамках архитектуры «клиент—сервер» или трехуровневой архитектуры создания приложений. В этом направлении ведущие производители ОС, СУБД и систем программирования скорее достигнут соглашений, чем в направлении стандартизации API.

Итак, нами были рассмотрены основные принципы, цели и подходы к реализа­ции системных API. Отметим еще один очень важный момент: желательно, что­бы интерфейс прикладного программирования не зависел от системы програм­мирования. Конечно, были одно время персональные компьютеры, у которых базовой системой программирования выступал интерпретатор с языка Basic, но это скорее исключение. Обычно базовые функции API не зависят от системы программирования и могут использоваться из любой системы программирова­ния, хотя и с применением соответствующих правил построения вызывающих последовательностей. В то же время в ряде случаев система программирования может сама генерировать обращения к функциям API. Например, мы можем на­писать в программе вызов функции по запросу 256 байт памяти

unsigned char * ptr - malloc (256);

Система программирования языка С сгенерирует целую последовательность об­ращений. Из кода пользовательской программы будет осуществлен вызов биб­лиотечной функции malloc, код которой расположен в RTL языка С. Библиотека времени выполнения в данном случае реализует вызов mall ос уже как вызов сис­темной функции API HeapAlloc

LPVOID HeapAlloc(

HANDLE hHeap. // handle to the private heap block - указатель на блок DWORD dwFlags. // heap allocation control flags - свойства блока DWORD dwBytes // number of bytes to allocate - размер блока);

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


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

unsigned char * ptr = (LPVOID) НеарАПос(GetProcessHeapO. 0. 256);

В этом случае программирование вызова немного усложняется, но получаемый конечный результат будет, как правило, короче и, что самое важное, будет рабо­тать эффективнее. Следует отметить, что далеко не все возможности API доступ­ны через обращения к функциям системы программирования. Непосредственное обращение к функциям API позволяет пользователю обращаться к системным ресурсам более эффективным способом. Однако это требует знания функций API, количество которых нередко достигает нескольких сотен.

Как правило, API не стандартизированы. В каждом конкретном случае набор вы­зовов API определяется, прежде всего, архитектурой ОС и ее назначением. В то же время принимаются попытки стандартизировать некоторый базовый набор функций, поскольку это существенно облегчает перенос приложений с одной ОС в другую. Таким примером может служить очень известный и, пожалуй, один из самых распространенных стандартов — стандарт POSIX. В этом стандарте пе­речислен большой набор функций, их параметров и возвращаемых значений. Стандартизированными, согласно POSIX, являются не только обращения к API, но и файловая система, организация доступа к внешним устройствам, набор сис­темных команд1. Использование в приложениях этого стандарта позволяет в дальнейшем легко переносить такие программы с одной ОС в другую путем про­стейшей перекомпиляции исходного текста.

Частным случаем попытки стандартизации API является внутренний корпора­тивный стандарт компании Microsoft, известный как WinAPI. Он включает в себя следующие реализации: Winl6, Win32s, Win32, WinCE. С точки зрения WinAPI (в силу ряда идеологических причин — обязательный графический «оконный» интерфейс пользователя), базовой задачей является окно. Таким образом, WinAPI изначально ориентирован на работу в графической среде. Однако базовые поня­тия дополнены традиционными функциями, в том числе частично поддержива­ется стандарт POSIX.


Дата добавления: 2015-01-18 | Просмотры: 601 | Нарушение авторских прав



1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 |



При использовании материала ссылка на сайт medlec.org обязательна! (0.003 сек.)