double arrow

Буфер обмена

Технологии обмена данными между процессами

OLE DB и ADO

OLE DB - базовая упрощенная спецификация COM и интерфейс API для доступа к данным. Это интерфейс системного уровня, в котором для доступа к данным в БД используется модель компонентных объектов COM. При этом учитываются как реляционные форматы баз данных, так и нереляционные. Вполне возможно создание кода, способного взаимодействовать непосредственно с OLE DB, но в случае с ADO это сделать значительно сложнее и, чаще всего, излишне.

Большинство провайдеров OLE DB, предоставляющих доступ к данным специфического провайдера (например Paradox, Oracle, Microsoft SQL Server, Microsoft Jet Engine и ODBC), реализованы также на интерфейсах OLE DB.

ADO (ActiveX Data Objects - объекты данных ActiveX) - это интерфейс прикладного уровня, который используется разработчиками приложений для доступа к данным. В отличие от OLE DB, состоящего из более чем 60 различных интерфейсов, в ADO используются лишь несколько интерфейсов для взаимодействия с разработчиками. Фактически интерфейсы OLE DB также используются и в ADO в качестве базовой технологии доступа к данным.

Предшественницей OLE DB была технология ODBC (Open Database Connectivity - открытое соединение с базами данных) Она все еще часто используется разработчиками для доступа к реляционным и некоторым нереляционным базам данных. По сути, интерфейсы OLE DB использует средства ODBC.

В Windows каждому процессу выделяется собственное виртуальное адресное пространство. Для 32-разрядных процессов его размер составляет 4 гигабайт, для 64-разрядных – 16 экзабайт.

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

Безусловно, один из процессов вправе в своем виртуальном адресном пространстве по какому-то адресу 0x12345678 разместить данные, которыми он не прочь поделиться с другими приложениями. Но беда в том, что для других процессов по этому адресу может находиться все что угодно, но только не требуемые данные, ведь речь идет об адресе в виртуальном адресном пространстве отдельного процесса, и он не имеет ничего общего с реальным физическим адресом. Рассмотрим, каким образом в таких непростых условиях решить задачу обмена данными между несколькими процессами.

Буфер обмена предназначен для передачи различного типа данных между приложениями или внутри одного приложения. Функционально в среде Windows буфер обмена представляет собой некоторый перечень методов Win32 API, осуществляющих операции с областью памяти, а именно загрузку в память и выгрузку из памяти данных различного типа. Для удобства работы с буфером обмена в Delphi внедрен специальный класс TClipboard, описанный в модуле Clipbrd. Присоединив этот модуль к проекту в строке uses, вы получите доступ к буферу обмена при помощи функции Clipboard.

functionClipboard: TClipboard;

Конструктор, создающий экземпляр класса TClipboard, не требуется, так как эта операция производится в рамках данного метода.

Буфер обмена служит универсальным хранилищем данных и позволяет размещать в себе обычную текстовую информацию, растровые и векторные рисунки, объекты OLE и т. п. Однако для различных типов данных, направляемых в буфер, требуются различные способы их хранения, которые определяются так называемым форматом буфера обмена. Для ключевых, наиболее часто используемых типов объектов в Microsoft Windows описаны специальные форматы, называемые зарегистрированными форматами буфера обмена.

Однако если приложение предполагает размещать в буфере какую-то экзотическую информацию, то программист имеет право описать и зарегистрировать в системе собственный пользовательский формат. Для таких целей в состав Win API включена функция RegisterClipboardFormat(). Формат, регистрируемый этим методом, определяет способ распределения области памяти, в которой будет храниться объект.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



Сейчас читают про: