Конфигурация модуля в modcom.ini
При использовании статической модели взаимодействия с COM важная информация задается в конфигурационном файле, считываемом при инициализации модуля MODCOM.
В конфигурационном файле modcom.ini задаются список и параметры проекции COM-интерфейсов и классов на типы внутреннего языка. Под проекцией понимается объявление типа в модуле MODCOM на основании COM-интерфейса с автоматическим преобразованием типов параметров и настраиваемым формированием различных идентификаторов. Конфигурационный файл находится в директории платформы. Его редактирование можно производить в любом текстовом редакторе, например, в Notepad.
Секция "Сommon".
В секции "Common" задаются параметры общие для всех объявляемых типов.
| Параметр | Значение по умолчанию | Комментарий |
|---|---|---|
| ErrorLog | 1 | Ведение файла протокола ошибок объявления типов. |
| LogFileName | modcom.log | Имя файла протокола ошибок объявления типов. |
Рекомендуется использовать запись ошибок объявлений в файл протокола для выявления проблемных типов и отдельных методов, особенно на этапе подключения новых COM-классов. Файл протокола с заданным именем записывается в директорию платформы.
Пример:
[Common] ErrorLog=1 LogFileName=modcom.log
Секция объявления типа.
Все остальные секции, кроме секции "Common", отвечают за объявление типа. Имя такой секции рассматривается как внутреннее имя типа.
| Параметр | Значение по умолчанию | Комментарий |
|---|---|---|
| Declare | 1 | Признак объявления данного типа. Задав 0 можно временно исключить данный тип из объявлений, не удаляя остальные его настройки в modcom.ini. |
| TypeLibPath | Полный путь к файлу библиотеки типов, объявляющей необходимый интерфейс COM. Может не задаваться, если задан параметр TypeLibGUID. | |
| TypeLibGUID | GUID зарегистрированной библиотеки типов, объявляющей необходимый интерфейс COM. Может не задаваться, если задан параметр TypeLibPath. | |
| LibVerMajor | 1 | Старшая версия запрашиваемой библиотеки типов. |
| LibVerMinor | 0 | Младшая версия запрашиваемой библиотеки типов. |
| IID | GUID необходимого COM-интерфейса (IID). Задается обязательно. | |
| ClassID | GUID необходимого COM-класса (CLSID). Может не задаваться, если задан параметр ProgID. | |
| ProgID | ProgId необходимого COM-класса. Может не задаваться, если задан параметр ClassID. | |
| TypeName | Идентификатор объявляемого типа во внутреннем языке на разных языках. Например, eng{MyType},rus{МойТип}. По умолчанию для всех языков в качестве идентификатора используется внутреннее имя типа, соответствующее имени секции. | |
| BrowseInterface | 0 | Признак отладочного вывода описаний функций обрабатываемого COM-интерфейса в текстовый файл. При подключении нового COM-класса рекомендуется поставить значение 1 и задать имя файла в параметре BrowseFileName. |
| BrowseFileName | typeinfo.txt | Имя текстового файла для отладочного вывода описаний функций обрабатываемого COM-интерфейса. При подключении нового COM-интерфейса рекомендуется поставить значение параметра BrowseInterface равным 1 и задать имя файла для диагностики проблем вывода. По завершении отладки вывод можно отключить. |
| UnsupportedFunc | Skip | Обработка неподдерживаемых функций. Возможные варианты: Skip – пропустить, Break – прервать. |
| DocStringAsLangName | Режим интерпретации строки документации (helpstring), задаваемой к каждому методу и свойству интерфейса как идентификатора на заданном языке. Возможные варианты: eng – как идентификатор для английского языка, rus – как идентификатор для русского языка. | |
| EmptyDocString | English | Режим, что делать, если строка документации (helpstring) пустая. Возможные варианты: Skip – пропустить, Break – прервать, English – использовать английское имя (заданное в IDL). Используется только при заданном параметре DocStringAsLangName. |
| UnsupportedName | English | Режим обработки некорректного идентификатора. Возможные варианты: Skip – пропустить, Break – прервать, English – использовать соответствующее английское имя (если оно в свою очередь корректно), Correct – попытаться исправить (управляется несколькими параметрами, см. ниже). |
| CorrectSpaces | Erase | Режим коррекции неправильного идентификатора. Позволяет исключить пробелы, что может потребоваться в строке документации. Возможные варианты: Erase – удалить пробелы, Replace – заменить пробелы символом, заданным параметром ReplaceSpaceChar, Break – прервать. |
| ReplaceSpaceChar | _ | Символ для замены пробелов в идентификаторе. Используется при CorrectSpaces=Replace. |
| CorrectFirstDigit | Prefix | Режим коррекции неправильного идентификатора. Позволяет избавиться от начальной цифры в имени. Возможные варианты: Prefix – добавить буквенный префикс, заданный параметром FirstDigitPrefix, Break – прервать. |
| FirstDigitPrefix | _ | Префикс для имен, начинающихся с цифры. Используется при CorrectFirstDigit = Prefix. |
| PropertyGetPrefix | eng{get_},rus{счит_} | Префикс для методов получения значений свойств. Можно задать eng{},rus{} для именования метода get-функции свойства без префикса. |
| PropertyPutPrefix | eng{put_},rus{зап_} | Префикс для методов установки значений свойств. Префикс нужен, чтобы имена методов получения и установки значений свойств различались. |
| PropertyPutArgName | eng{value},rus{значение} | Имя формального параметра (единственного) метода, соответствующего put-функции свойства. |
| AutoArgNamePrefix | eng{arg},rus{арг} | Префикс имен формальных параметров методов для случая, когда в COM-интерфейсе таковые не заданы. Параметры нумеруются с 1 так, что для префикса "арг" имена будут: арг1, арг2, арг3 и т.д. |
| DateAsTime | Явное указание интерпретации типа VT_DATE как ВРЕМЯ (cм. Соответствие типов COM типам внутреннего языка). Для указания используются английские имена методов и свойств. Отдельные указания разделяются запятыми. Указание состоит из имени свойства или метода и фигурных скобок. Пример для свойства: MyProp{prop}. Здесь "prop" говорит о том, что тип свойства надо рассматривать как время. Для методов в фигурных скобках указываются необходимые позиции параметров и/или результат. Пример для метода: MyMethod{res;arg(2);arg(4)}. Здесь отдельные указания для метода разделены точкой с запятой, "res" – указывает на тип возвращаемого значения, а "arg" – на тип параметра с соответствующим номером (от 1). Т.е. в примере MyMethod возвращает время, а также его второй и четвертый параметры имеют тип время. |
Пример:
; описание параметров объявления типа со внутренним именем Example
[Example]
; задаем GUID библиотеки типов
TypeLibGUID={42716B99-8992-11DA-9542-000476D1BF92}
; и GUID интерфейса
IID={42716BA5-8992-11DA-9542-000476D1BF92}
; для определения класса задаем ProgId
ProgID=IbCOMExt.Example
; ставим признак, что этот тип объявлять
Declare=1
; задаем имена типа для английского и русского языков,
; под которыми он будет доступен во внутреннем языке
TypeName=eng{Example_COM},rus{Пример_COM}
; ставим признак отладочного вывода функций интерфейса COM
BrowseInterface=1
; и задаем имя соответствующего текстового файла
BrowseFileName=ExampleCOM.txt
; ставим признак генерации ошибки при обнаружении неподдерживаемой функции
UnsupportedFunc=Break
; ставим признак интерпретации строки документации (helpstring) в качестве
; идентификатора для русского языка
DocStringAsLangName=rus
; ставим пустой префикс для get-функций свойств
PropertyGetPrefix=eng{},rus{}
; ставим префиксы для put-функций свойств
PropertyPutPrefix=eng{put_},rus{зап_}
; ставим имя формального параметра put-функций свойств
PropertyArgName=eng{value},rus{значение}
; ставим префиксы для автоматического именования формальных параметров
AutoArgNamePrefix=eng{arg},rus{арг}
; явно указываем места, где VT_DATE надо интерпретировать как тип ВРЕМЯ:
; - тип второго параметра метода DateTime
; - тип возвращаемого значения метода GetTime
; - тип свойства StartTime
DateAsTime=DateTime{arg(2)},GetTime(res),StartTime{prop}
Замечание: чтение файла конфигурации и объявление типов происходят при инициализации модуля. Поэтому для вступления в силу отредактированного файла modcom.ini необходимо перезапустить платформу.