Главная » Delphi

Типы данных Object Pascal

Добавлено Дата: 14 March, 2012 категория: Delphi

Одним  из самых больших  достоинств языка  Object  Pascal является строгая типиза ция данных.  В частности, это означает, что все реальные переменные, передаваемые в качестве параметров в функцию  или процедуру, должны  абсолютно точно соответ ствовать типу формальных параметров в объявлении данной функции  или  процеду ры. В Object  Pascal не существует предупреждений компилятора о подозрительных преобразованиях указателя, с которыми хорошо знакомы программисты на языке  C. Компилятор Object  Pascal не допустит  вызова  функции с типом  указателя, отличным от того,  который описан в объявлении этой  функции. (Однако в функцию, параметр которой описан как  нетипизированный  указатель, можно  передавать указатели  лю бых типов.) В целом,  строгая типизация данных  в языке  Pascal предназначена для предупреждения попыток заткнуть квадратной пробкой круглую дыру.

Читать »

Разработка баз данных Delphi

Добавлено Дата: 14 March, 2012 категория: Delphi

Типы баз данных

Приведенное ниже  описание компонентов взято  из раздела  “Using Databases” (Использование баз данных) интерактивной справочной системы Delphi, поскольку авторы полагают, что  никто  кроме  Borland не  в состоянии лучше  описать типы  баз данных, поддерживаемых архитектурой Delphi. Ссылки, упоминаемые в этом разделе, также относятся к интерактивной справочной системе.

Читать »

Экспорт объектов из библиотек DLL

Добавлено Дата: 14 March, 2012 категория: Delphi

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

Читать »

Применение DLL с совместно используемой памятью

Добавлено Дата: 14 March, 2012 категория: Delphi

Для иллюстрации применения DLL с совместно используемой памятью было созда но два работающих с ней приложения. Первое приложение (проект App1.dpr) позво ляет   модифицировать  глобальные  данные    библиотеки  DLL.   Второе  приложение (проект App2.dpr) обращается к этим  данным  и периодически обновляет два компо нента  TLabel, используя для этого  компонент TTimer. При  запуске обоих  приложений можно  увидеть  последствия совместного доступа  к данным  библиотеки DLL, т.е. окно приложения App2 будет отображать изменения, внесенные в окне приложения App1.

Читать »

Создание DLL с совместно используемой памятью

Добавлено Дата: 14 March, 2012 категория: Delphi

В листинге 6.12 содержится исходный код файла  проекта библиотеки DLL, позво ляющей  приложениям, обращающимся к ее функциям, совместно использовать гло бальные данные.  Эти глобальные данные  хранятся в переменной под именем GlobalData.

Листинг 6.12. ShareLib — совместное использование глобальных данных

Читать »

Обращение к функциям обратного вызова из библиотеки DLL

Добавлено Дата: 13 March, 2012 категория: Delphi

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

Читать »

Функции обратного вызова

Добавлено Дата: 13 March, 2012 категория: Delphi

Функция обратного вызова (callback function) — это функция приложения, вызываемая библиотеками  DLL  Win32  или  другими   библиотеками  DLL.  Фактически  в  системе Windows присутствует несколько функций API, которые используют функции обратного вызова. При  вызове таких  функций им передается адрес той функции приложения, ко торую Windows может  вызвать. Если не совсем  понятно, какое  отношение это имеет  к библиотекам DLL, то напомним, что  реально функции  API Win32  экспортируются  из системных библиотек DLL. По сути, при  передаче адреса  функции обратного вызова  в функцию API Win32 происходит передача этой функции в библиотеку DLL.

Читать »

Исключения и директива SafeCall

Добавлено Дата: 13 March, 2012 категория: Delphi

Функции, отмеченные директивой safecall, используются в модели  COM и при обработке исключений. Она гарантируют, что любое  исключение будет передано вы зывающей функции. Функция  с директивой SafeCall преобразует исключение в воз вращаемое значение HResult. Кроме  того,  применение ключевого слова  SafeCall подразумевает соблюдение соглашения о вызовах StdCall. Следовательно, функция с директивой SafeCall должна быть объявлена так:

Читать »

Перехват исключений в 16  разрядной Delphi

Добавлено Дата: 13 March, 2012 категория: Delphi

В среде  16 разрядной Delphi 1 объекты исключений имели  формат, специфический именно для этой среды разработки. Поэтому  при передаче исключений библиотекой DLL их приходилось перехватывать до выхода  из подпрограмм DLL, поскольку, освобождая при проходе стек вызова модулей, они приводили к возникновению ошибки и аварийному завершению приложения. Во избежание таких  неприятностей каждую точку входа в биб лиотеку DLL следовало заключать в собственный блок обработки исключения, как показа но в следующем примере:

Читать »

Функция входа/выхода динамически компонуемых библиотек

Добавлено Дата: 12 March, 2012 категория: Delphi

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

Читать »

Явная загрузка библиотек DLL

Добавлено Дата: 12 March, 2012 категория: Delphi

Несмотря на удобство метода  неявной загрузки  библиотек DLL, он не всегда бывает желательным. Предположим, что  существует  некоторая библиотека DLL, содержащая множество функций. Вполне  вероятно, что в обычном режиме работы приложение ни когда не вызовет ни одной  из функций этой  библиотеки. Получается, что  при  каждом запуске такого  приложения загрузка  данной библиотеки приводит к напрасным затра там памяти, особенно при использовании этим приложением сразу нескольких библио тек  DLL. Другим  примером может  служить  применение компонентов библиотек DLL для заполнения объектов, имеющих очень  большой размер и содержащих списки  весь ма специализированных функций, предоставляемых на выбор  для использования в кон кретных ситуациях. (Например, списки  доступных  драйверов принтеров или  подпро грамм преобразования формата файлов.) В такой  ситуации имело  бы смысл загружать каждую библиотеку DLL только  по конкретному требованию, исходящему  от приложе ния. Этот метод и называется явной загрузкой (explicitly loading) библиотек DLL.

Читать »

Язык программирования Object Pascal

Добавлено Дата: 12 March, 2012 категория: Delphi

Комментарии

Начнем рассмотрение темы с того,  каким образом следует вносить комментарии в программу на языке  Object Pascal. Этот язык  поддерживает три  типа  комментариев — с использованием фигурных скобок, пар скобка–звездочка и двойной наклонной чер ты (в стиле C++). Ниже  приведены три примера комментариев Object  Pascal:

Читать »

Использование DLL в приложениях Delphi

Добавлено Дата: 12 March, 2012 категория: Delphi

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

Первая библиотека DLL, созданная в данной главе,  содержала модуль интерфейса (PenniesInt.pas). Воспользуемся этим модулем для иллюстрации неявного связы вания  с библиотекой DLL. Главная  форма демонстрационного проекта содержит компоненты TMaskEdit, TButton и девять экземпляров компонента TLabel.

Читать »

Отображение немодальных форм из библиотек DLL

Добавлено Дата: 12 March, 2012 категория: Delphi

Для  иллюстрации  размещения  в  библиотеке  DLL  немодальных  форм  вновь  вос

пользуемся формой с календарем из предыдущего раздела.

Для отображения из библиотеки немодальных форм  такая  DLL должна  содержать две функции. На первую возлагается задача создания и отображения формы, а на вто рую — ее освобождения. В листинге 6.4 представлен исходный код, иллюстрирующий вывод немодальной формы функциями DLL.

Читать »

Отображение модальных форм из DLL

Добавлено Дата: 11 March, 2012 категория: Delphi

В настоящем разделе рассматривается разработка модальной формы, доступной в библиотеке DLL. Одна из причин, по которым имеет  смысл размещать используемые формы в библиотеке DLL, заключается в возможности применения таких  форм  в дру гих приложениях Windows  и даже в другой  среде  разработки (например в C++ или  в Visual Basic).

Читать »