Интерфейсы прикладного программирования. API Интерфейс прикладного программирования (англ.



















lekciya9_api.ppt
- Количество слайдов: 17
Интерфейсы прикладного программирования
API Интерфейс прикладного программирования (англ. Application Programming Interface, API) — набор готовых функций, структур и констант, предоставляемых приложением (библиотекой, сервисом) для её использования во внешних программных продуктах. Посредством API различные приложения могут взаимодействовать друг с другом.
API Программные компоненты взаимодействуют друг с другом посредством API. При этом обычно компоненты образуют иерархию — высокоуровневые компоненты используют API низкоуровневых компонентов, а те, в свою очередь, используют API ещё более низкоуровневых компонентов. .NET Framework -> WinAPI ДубльГИС API -> WinAPI XNA -> .NET Framework -> DirectX API -> WinAPI
Windows API — набор базовых функций интерфейсов программирования приложений операционных систем семейств Windows и Windows NT. Является самым низкоуровневым способом взаимодействия приложений с Windows.
SDK SDK (software development kit) - комплект средств разработки, который позволяет программистам создавать приложения для конкретной платформы.
Отличия SDK и API. API – это только интерфейс, т.е. набор сигнатур некоторых функций, которые может использовать программа. SDK – включает в себя API, а так же документацию, примеры программ, дополнительные утилиты упрощающие процесс разработки (средства отладки и.т.д.). Сигнатура функции — часть общего объявления функции, позволяющая средствам трансляции идентифицировать функцию среди других. Примеры: void WriteLine(string format, object arg0); void Solve(double a,double b,double c,out double x1,out double x2)
Динамически подключаемые библиотеки Весь функционал Windows API реализован в виде набора динамически подключаемых библиотек (*.dll). DLL (Dynamic-link library — динамически подключаемая библиотека) —это библиотека, позволяющая многократное использование различными программами. Такие библиотеки обычно имеют расширение DLL (или OCX для библиотек содержащих ActiveX компоненты, или DRV для драйверов системы). Формат (внутренняя структура) у DLL такая же как и у исполняемых файлов Windows (EXE).
Динамически подключаемые библиотеки DLL – это скомпилированный файл формата PE (Portable Executable). Такой же формат имеют исполняемые файлы Windows (EXE). DLL не может быть запущена напрямую, как EXE-файл, однако может быть загружена любым EXE–файлом. В момент загрузкивыгрузки у DLL выполняется функция DllMain DLL может экспортировать набор функцийпроцедурклассов, которые впоследствии могут использоваться различными приложениями. Исполняемый файл же наоборот импортирует набор функцийпроцедурклассов DLL.
Windows API Базовые сервисы (вкл. работу с файлами, процессами, потоками и.т.п) Реализовано в kernel32.dll Расширенные сервисы (работа с реестром, управление правами пользователей, выключениеперезагрузка компьютера, запуск сервисов) Реализовано в advapi32.dll Интерфейс графических устройств (вывод графического содержимого на мониторы, принтеры и другие устройства) Реализовано в gdi32.dll
Windows API Интерфейс пользователя(создание и управление окнами Windows, включает большинство базовых элементов управления – кнопка, полоса прокрутки и.т.п.) Реализовано в user32.dll Оболочка Windows (Windows Shell) - предоставляет приложениям доступ к функциям операционной оболочки Windows (Explorer). Реализовано в shell32.dll и shlwapi.dll
Зависимости исполняемых файлов Любой исполняемый файл (exe) имеет зависимости от конкретных библиотек (как минимум любой исполняемый файл windows имеет в зависимостях зависимость от kernel32.dll). Зависимости определяются с помощью: Depends.exe (идёт вместе с Visual Studio). Total Commander (F3)
Зависимости исполняемых файлов .NET – ориентированное приложение
Зависимости исполняемых файлов Sol.exe - Пасьянс
Использование API функций Для того, чтобы использовать некоторую внешнюю функцию в программе на C#, нужно: Знать имя библиотеки (dll файла) в котором реализована функция Знать сигнатуру функции С помощью конструкции DllImport указать, что функция будет использоваться в программе
Импорт функции FindWindow using System.Runtime.InteropServices; … [DllImport("user32.dll", SetLastError = true)] static extern IntPtr FindWindow(string lpClassName, string lpWindowName); Для того, чтобы узнать корректную сигнатуру функции и пример её импорта в C# можно воспользоваться сервисом http://www.pinvoke.net Сигнатура функции
Поиск окна калькулятора и передача ему последовательности цифр [DllImport("user32.dll", SetLastError = true)] static extern IntPtr FindWindow(string lpClassName, string lpWindowName); [DllImport("user32.dll", SetLastError = true)] static extern bool PostMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam); static void Main(string[] args) { const int WM_CHAR = 0x102; IntPtr h = FindWindow("CalcFrame", "Калькулятор"); PostMessage(h, WM_CHAR, (IntPtr)'2', IntPtr.Zero); Thread.Sleep(500); }
[DllImport("user32.dll")] static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, int uFlags); static void Main(string[] args) { IntPtr h = FindWindow("CalcFrame", "Калькулятор"); for (double i = 0; i < 1000; i+=4) { double y = Math.Cos(i/25)*25; SetWindowPos(h, IntPtr.Zero, (int)i, (int)y+300, 0, 0, 1); Thread.Sleep(50); } }