Работа с Реестром ОС WindowsNT/2000/XP, страница 7

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

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

Реестр состоит из множества стандартных мест, в которых можно сохранять данные. Например, можно зарегистрировать новый тип файла. После этого графическая оболочка будет отображать для всех подобных файлов соответствующие им значки, контекстные меню и т. п. Другой пример — информация о программном продукте. Подобную информацию обычно размещают в ключе вида HKEY_CURRENT_USER\SOFTWARE\имяКомпании\имяПродукта\номерВерсии, если программный продукт относится к текущему пользователю. Если же программа относится ко всему компьютеру, следует внести информацию о ней в ключ HKEY_LOCAL_MACHINE\SOFTWARE\ имяКомпании\имяПродукта\номерВерсии.

Регистрация и прекращение регистрации библиотек DLL

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

Тогда может показаться, что библиотеки DLL создают эти разделы в Реестре при каждой загрузке. На самом деле это не так, поскольку столь часто выполняемое изменение Реестра чрезвычайно дорогое удовольствие. Библиотека DLL модифицирует Реестр только один раз. Единовременная модификация называется регистрацией. Регистрация выполняется с помощью функции API DllRegisterServer. Она обычно вызывается программой установки при инсталляции библиотеки DLL для создания необходимых разделов

Регистрация библиотеки DLL

Функцию DllRegisterServer вызывает утилита regsvr32.exe, поставляемая вместе с операционными системами Windows NT и Windows 95. Эту утилиту обычно вызывают из командной строки. Как правило, пользователям не приходится самим регистрировать библиотеки DLL с помощью программы regsvr32.exe. Однако иногда в этом все же возникает необходимость. В этом случае с клавиатуры необходимо ввести следующую командную строку:

regsvr32  mydll.dll

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

Если вы хотите отключить появление окна, например, при выполнении пакетной обработки, в командную строку следует добавить ключ /s, как показано ниже:

regsvr32   /s  mydll.dll

Прекращение регистрации библиотеки DLL

Можно прекратить регистрацию библиотеки DLL. В результате все созданные библиотекой записи Реестра будут удалены. Прекращение регистрации удобно при замещении зарегистрированной библиотеки DLL новой или при ее полном удалении. Эта операция выполняется функцией DllUnregisterServer. Ее можно вызвать, запустив программу regsvr32.exe с ключом /u:

regsvr32   /u  mydll.dll

Создание регистрирующихся библиотек DLL

При создании регистрирующихся библиотек DLL вы должны реализовать функцию API DllRegisterServer. В этой функции API вам придется использовать функции API Реестр, о которых рассказывалось ранее в этой книге, для конфигурирования Реестра. Кроме того, в случае успешного завершения регистрации необходимо возвратить S_OK. В противном случае необходимо возвратить E_UNEXPECTED. С помощью кодов возврата вы сможете сообщить программе regsvr32.exe, какое окно следует вывести.