Общие сведения о библиотеках динамической компоновки (DLL)

Рано или поздно вам потребуется сделать нечто, выходящее за пределы возможностей Visual Basic — или, по крайней мере, требующее очень сложного кода. В такой ситуации у вас есть три выхода:

О написать нужный фрагмент на другом языке (например, С) и вызвать его из Visual Basic;

О управлять работой другого приложения средствами OLE Automation;

О воспользоваться готовыми библиотеками программ, образующими интерфейс Windows API.

ПРИМЕЧАНИЕ Windows API представляет собой набор DLL-библиотек с тысячами подпрограмм, которые программист может вызывать из своих приложений. Эти библиотеки являются важной частью операционной системы Windows.

В этом уроке мы обсудим последний вариант, потому что тонкости программирования на С и C++ выходят за рамки этой книги, a OLE Automation лучше не трогать до тех пор, пока вы не освоите основы программирования на Visual Basic. Чтобы воспользоваться услугами Windows API, необходимо подключить к вашей программе библиотеки динамической компоновки, или DLL. DLL представляют собой компоненты приложений, объединяющие несколько функций в файле, который связывается с программой и используется ею во время выполнения. Функции DLL не внедряются в приложение. DLL представляет собой откомпилированный код (наподобие классов, описанных в уроке 4). Такая возможность чрезвычайно полезна, если вы хотите воспользоваться чьим-то готовым кодом или уменьшить размер своей программы. Операционная система Windows работает по тому же принципу. Она состоит из множества DLL и нескольких программ, которые пользуются услугами этих DLL. Примером могут служить диалоговые окна Open/Save, появляющиеся при открытии и закрытии документов. Вы замечали, что во всех приложениях эти окна выглядят одинаково? Здесь нет ничего удивительного, поскольку они действительно совпадают. Диалоговое окно вызывается из DLL, поэтому им можно пользоваться в любой программе.

Многие программисты-новички считают Windows API чем-то вроде большого «черного ящика», который трудно понять и еще труднее использовать. В действительности API представляет собой набор DLL, обеспечивающих функциональные возможности операционной системы Windows. Заранее откомпилированные средства API находятся в вашем полном распоряжении — при условии, что вы знаете, что вам требуется, где найти нужную функцию и как ее вызвать. Одни DLL находятся в подкаталоге \Windows\System, другие — в основном каталоге Windows или других его подкаталогах.

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

Правила вызова DLL

Вызов DLL может выглядеть довольно сложно (особенно если вы незнакомы с типами данных языка С). К счастью, DLL, составляющие Windows API, хорошо документированы, а код для объявления их функций включен в Visual Basic. Перед тем как пользоваться функцией DLL, ее необходимо объявить.

Чтобы сообщить Visual Basic о своем желании обратиться к DLL, вы объявляете процедуру и указываете типы ее параметров. После этого ваша программа может вызвать нужную функцию DLL. На основании объявления Visual Basic поймет, как передавать информацию в DLL и получать результаты. Windows API содержит чрезвычайно мощный и полезный набор функций, но им не хватает устойчивости. Всего одна ошибка в типе параметра — и ваша программа начинает работать со сбоями, неожиданно завершается и даже «подвешивает» систему. Все это может привести к неприятным последствиям, особенно если вы не привыкли часто сохранять свою работу. Нарушение правил вызова DLL чаще всего приводит к сбою системы,

ВНИМАНИЕ При работе с DLL сохраняйте свою работу перед каждым пробным запуском. Ошибка при вызове DLL может нарушить работу компьютера, и вы потеряете все, что успели сделать!

Перед обращением к Windows API следует определить, какая функция вам нужна. После того как ее имя станет известно, следует объявить ее в программе. Для этого применяется оператор Declare, например:

Private Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal IpszSoundName As String, ByVal uFlags As Long) As Long Возможно, этот фрагмент выглядит устрашающе, но на самом деле понять его не так уж сложно — достаточно лишь знать правила вызова DLL. Здесь объявляется функция API с именем sndPlaySound, предназначенная для воспроизведения WAV-файла. Давайте рассмотрим этот фрагмент и выясним, что в нем происходит.


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



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