Разработка приложений для NetWare

Средства разработки, структура и правила написания NLM-модулей

Основным средством разработки NLM-модулей, загружаемых на файловом сервере, является компилятор Novell/Watcom C Network Compiler/386. Это связано с тем, что только этот С-компилятор имеет в своём составе редактор NLMLINK, позволяющий компоновать NLM-модули.

Следует отметить, что компоновщик WLINK, входящий в состав компилятора Novell/Watcom Network C for DOS (средство разработки приложений для DOS-рабочей станции), также позволяет создавать NLM-модули.

Для разработки NLM-модуля необходимо выполнить следующие действия:

  1. Разработать тексты С-программ. Это обычные программы на языке С, где используются обращения к службам NetWare (примитивы NetWare для NLM-модулей).
  2. Разработать make-файл (рисунок 4.1).
  3. Запустить утилиту WMAKE для создания NLM-модуля.
WMAKE  -f  make-файл  имя.nlm

# Описание переменных make-файла, используемых при

# задании параметров программ

переменная=значение

переменная=значение

.......

# Определение имени компилятора

.C.OBJ:

 wcl386   параметры

# Описание состава obj-файлов

имя.obj:  имя.с  имя.с  ......  имя.h

имя.obj:  имя.с  имя.с  ......  имя.h

......

# Описание состава NLM-модуля

имя.nlm: имя.obj имя.obj ..... файл_определений.def

# Описание имени компоновщика

nlmlink файл_определений

Рис. 4.1. Описание make-файла, используемого при создании NLM-модуля

В make-файле описываются имена компилятора и компоновщика, а также состав каждого obj-файла и nlm-файла. Если С-файл был изменён, то после запуска утилиты WMAKE выполняется компиляция этого файла и перекомпоновка obj- и nlm- файла.

Файл определений, имя которого указывается в make-файле, имеет расширение DEF и содержит информацию для компоновщика. В таблице 4.1 приведены ключевые слова, используемые в файле определений.

Таблица 4.1. Ключевые слова файла определений
Ключевое словоОписание
DESCRIPTORСтрока до 127 символов, заключённая в двойные кавычки. Эта строка будет отображаться на консоли при выполнении команды файлового сервера MODULES.
INPUTСписок модулей и файлов для компоновки. Может содержать имена требуемых obj-файлов и файлов со списками obj-файлов. Файл со списком обозначается как @имя_файла. Каждая строка этого файла должна начинаться с пробела. В этом списке должен быть указан путь к файлу PRELUDE.OBJ. Модуль PRELUDE устанавливает среду NLM-программы с помощью
распределения и инициализации внутренних структур данных,
создания экрана для использования его NLM-программой,
разборки параметров командной строки для передачи их в процедуру main() как аргументов вида argc и argv,
старта новой нити для выполнения процедуры main().
Пример:
INPUT NW3NLM E:\WC386\PRELUDE @E:\WC386\A1.MOD
OUTPUTИмя NLM-модуля (без расширения).
IMPORTСписок функций, доступных в других NLM-модулях. Может содержать имена функций и файлов со списками функций. Файл со списком обозначается как @имя_файла. Каждая строка файла должна начинаться с пробела. Перед загрузкой этого NLM-модуля должны быть загружены NLM-модули, содержащие функции, которые перечислены в списке IMPORT.
Таким образом, NLM-модули могут выступать в качестве динамических библиотек. Они загружаются один раз, и все NLM-модули, запускаемые в дальнейшем, могут использовать функции, которые описаны в списке EXPORT (см. ниже) этих модулей-библиотек.
В списке IMPORT следует указывать файл @CLIB.IMP, объявляющий процедуры из стандартной С-библиотеки. Если используется арифметика с плавающей точкой, то необходимо указать файл @MATHLIB.IMP.
Пример:
IMPORT @E:\WC386\CLIB.IMP @E:\WC386\MATHLIB.IMP
SCREENNAMEВ двойных кавычках указывается имя экрана, автоматически создаваемого при загрузке NLM-модуля. Если имя не указывается, то в качестве идентификатора экрана используется имя модуля.
THREADNAMEСтрока до 5 символов в двойных кавычках - шаблон для генерации имён новых нитей, создаваемых в загружаемом NLM-модуле. При формировании имени нити к шаблону добавляются цифры (по возрастанию, начиная с 0). Если имя не указано, то используются первые 5 символов имени модуля.
EXPORTСписок имён функций, доступных другим NLM-модулям. В списке можно использовать имя файла (@имя_файла). Каждая строка файла должна начинаться с пробела.
Все NLM-модули, загружаемые в дальнейшем, могут обращаться к этим функциям в случае, если они описаны в списках IMPORT этих модулей.
MAPЗапрашивает создание MAP-файла. Если имя не указано, будет использоваться имя из директивы OUTPUT.
DEBUGЗапрашивает, чтобы компоновщик включал дополнительную информацию для отладчика.
CHECKУказывает функцию, вызываемую перед выгрузкой NLM-модуля.
STACKРазмер стека, выделяемого при инициализации процесса, связанного с NLM-модулем. По умолчанию - 8192 байта.
MULTIPLEРазрешает загрузку нескольких копий NLM-модулей. Иначе при попытке загрузки более одной копии на консоль файлового сервера будет выдано сообщение об ошибке.

В файле определений *.DEF обязательными являются ключевые слова DESCRIPTION, INPUT, OUTPUT, IMPORT.

Предыдущая глава || Оглавление || Следующая глава