Руководство разработчика

Конфигурация модуля в modcom.ini

При использовании статической модели взаимодействия с COM важная информация задается в конфигурационном файле, считываемом при инициализации модуля MODCOM.

В конфигурационном файле modcom.ini задаются список и параметры проекции COM-интерфейсов и классов на типы внутреннего языка. Под проекцией понимается объявление типа в модуле MODCOM на основании COM-интерфейса с автоматическим преобразованием типов параметров и настраиваемым формированием различных идентификаторов. Конфигурационный файл находится в директории платформы. Его редактирование можно производить в любом текстовом редакторе, например, в Notepad.

Секция "Сommon".

В секции "Common" задаются параметры общие для всех объявляемых типов.

ПараметрЗначение по умолчаниюКомментарий
ErrorLog1Ведение файла протокола ошибок объявления типов.
LogFileNamemodcom.logИмя файла протокола ошибок объявления типов.

Рекомендуется использовать запись ошибок объявлений в файл протокола для выявления проблемных типов и отдельных методов, особенно на этапе подключения новых COM-классов. Файл протокола с заданным именем записывается в директорию платформы.

Пример:

[Common]
ErrorLog=1
LogFileName=modcom.log

Секция объявления типа.

Все остальные секции, кроме секции "Common", отвечают за объявление типа. Имя такой секции рассматривается как внутреннее имя типа.

ПараметрЗначение по умолчаниюКомментарий
Declare1 Признак объявления данного типа. Задав 0 можно временно исключить данный тип из объявлений, не удаляя остальные его настройки в modcom.ini.
TypeLibPath Полный путь к файлу библиотеки типов, объявляющей необходимый интерфейс COM. Может не задаваться, если задан параметр TypeLibGUID.
TypeLibGUID GUID зарегистрированной библиотеки типов, объявляющей необходимый интерфейс COM. Может не задаваться, если задан параметр TypeLibPath.
LibVerMajor1 Старшая версия запрашиваемой библиотеки типов.
LibVerMinor0 Младшая версия запрашиваемой библиотеки типов.
IID GUID необходимого COM-интерфейса (IID). Задается обязательно.
ClassID GUID необходимого COM-класса (CLSID). Может не задаваться, если задан параметр ProgID.
ProgID ProgId необходимого COM-класса. Может не задаваться, если задан параметр ClassID.
TypeName Идентификатор объявляемого типа во внутреннем языке на разных языках. Например, eng{MyType},rus{МойТип}. По умолчанию для всех языков в качестве идентификатора используется внутреннее имя типа, соответствующее имени секции.
BrowseInterface0 Признак отладочного вывода описаний функций обрабатываемого COM-интерфейса в текстовый файл. При подключении нового COM-класса рекомендуется поставить значение 1 и задать имя файла в параметре BrowseFileName.
BrowseFileNametypeinfo.txt Имя текстового файла для отладочного вывода описаний функций обрабатываемого COM-интерфейса. При подключении нового COM-интерфейса рекомендуется поставить значение параметра BrowseInterface равным 1 и задать имя файла для диагностики проблем вывода. По завершении отладки вывод можно отключить.
UnsupportedFuncSkip Обработка неподдерживаемых функций. Возможные варианты: Skip – пропустить, Break – прервать.
DocStringAsLangName Режим интерпретации строки документации (helpstring), задаваемой к каждому методу и свойству интерфейса как идентификатора на заданном языке. Возможные варианты: eng – как идентификатор для английского языка, rus – как идентификатор для русского языка.
EmptyDocStringEnglish Режим, что делать, если строка документации (helpstring) пустая. Возможные варианты: Skip – пропустить, Break – прервать, English – использовать английское имя (заданное в IDL). Используется только при заданном параметре DocStringAsLangName.
UnsupportedNameEnglish Режим обработки некорректного идентификатора. Возможные варианты: Skip – пропустить, Break – прервать, English – использовать соответствующее английское имя (если оно в свою очередь корректно), Correct – попытаться исправить (управляется несколькими параметрами, см. ниже).
CorrectSpacesErase Режим коррекции неправильного идентификатора. Позволяет исключить пробелы, что может потребоваться в строке документации. Возможные варианты: Erase – удалить пробелы, Replace – заменить пробелы символом, заданным параметром ReplaceSpaceChar, Break – прервать.
ReplaceSpaceChar_ Символ для замены пробелов в идентификаторе. Используется при CorrectSpaces=Replace.
CorrectFirstDigitPrefix Режим коррекции неправильного идентификатора. Позволяет избавиться от начальной цифры в имени. Возможные варианты: Prefix – добавить буквенный префикс, заданный параметром FirstDigitPrefix, Break – прервать.
FirstDigitPrefix_ Префикс для имен, начинающихся с цифры. Используется при CorrectFirstDigit = Prefix.
PropertyGetPrefixeng{get_},rus{счит_} Префикс для методов получения значений свойств. Можно задать eng{},rus{} для именования метода get-функции свойства без префикса.
PropertyPutPrefixeng{put_},rus{зап_} Префикс для методов установки значений свойств. Префикс нужен, чтобы имена методов получения и установки значений свойств различались.
PropertyPutArgNameeng{value},rus{значение} Имя формального параметра (единственного) метода, соответствующего put-функции свойства.
AutoArgNamePrefixeng{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 необходимо перезапустить платформу.