Для расширения возможностей в среде имеется механизм добавления функций из динамически подключаемых библиотек (Dynamic Link Libraries, DLL). Данные библиотеки являются стандартными для Windows и могут создаваться на языках программирования C++, Pascal или других. Для подключения к среде Stratum необходимо создать текстовый файл, описывающий содержащиеся в библиотеке функции.

Файл описания должен иметь расширение TDL и содержать следующие элементы.


DLL <"имя файла"> <16/32> [PRELOAD]


это заголовок библиотеки - указывается имя DLL файла и тип - 16 или 32 разрядная библиотека (соответственно для 16 и 32 разрядной версии Stratum). Если указана опция PRELOAD, то DLL инициализируется сразу при загрузке, иначе при первом вызове функции.


NAME ["CDECL"/"PASCAL"] <"имя функции">[,"имя функции в DLL"] [[ARG] "тип аргумента"[:"тип в DLL"][,...]] [RET ["тип возвращаемого значения"][:"тип в DLL"]]


Перечисляются функции, находящиеся в DLL. Здесь перечисляются последовательно:

- тип вызова, если необходимо, (CDECL/PASCAL). По умолчанию для 16-ти разрядной версии Stratum принимается тип PASCAL, для 32-х разрядной CDECL;

- имя функции, как она будет видна в среде Stratum;

- имя функции, если необходимо, как она называется в DLL. Имена функций в DLL могут не совпадать с внешними именами, для их получения можно воспользоваться утилитами типа impdef.exe, exemap.exe и другими;

- аргументы (если есть), через запятую перечисляются типы, из числа принятых в среде Stratum. Если необходимо, через двоеточие указывается тип аргумента в DLL, в этом случае при вызове функции будет происходить преобразование аргумента;

- возвращаемое значение (если есть), указывается тип, принятый в среде Stratum, и, если необходимо, преобразование типа.


Таблица поддерживаемых типов для преобразования аргументов функций:

тип аргумента в функции DLL


размер (байт)

тип в Stratum соответствующий без преобразования


описание 

word8

1


беззнаковое, целое

int8

1


знаковое, целое

word16

2


беззнаковое, целое

int16

2


знаковое, целое

word32

4

HANDLE, COLORREF,

STRING, (POINTER)

беззнаковое, целое 

или указатель

int32

4

INTEGER

знаковое, целое

float32

4


с плавающей запятой

float64

8

FLOAT

с плавающей запятой

float80

10


с плавающей запятой


Если не обходимо, возможно преобразование типов передаваемых данных как в аргументах, так и в возвращаемом значении.

Пример: запись ARG "FLOAT":"int16" будет означать преобразование из целого и знакового слова в стандартный для Stratum тип числа с плавающей запятой.


В одном файле может описываться сразу несколько библиотек.

Пример файла описания (на одну функцию):


DLL "GWIN2d16.DLL" 16

name "GetAngle","@GETANGLEBYXY2D$QDD" arg "FLOAT","FLOAT" ret "FLOAT"


DLL "GWIN2d32.DLL" 32

name "GetAngle","@GetAngleByXY2d$qqsdd" arg "FLOAT","FLOAT" ret "FLOAT"


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


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

Created with the Personal Edition of HelpNDoc: Free Web Help generator