Операционная система NetWare

       

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


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

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

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

  • Разработать тексты С-программ. Это обычные программы на языке С, где используются обращения к службам NetWare (примитивы NetWare для NLM-модулей).

  • Разработать make-файл (рисунок 4.1).

  • Запустить утилиту 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.



    Содержание раздела